🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1054閲覧

Firebaseによるログイン処理

monokuro08

総合スコア12

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/12/10 10:59

前提・実現したいこと

**「登録」画面→「メアドを確認してください」画面→「HomeViewController」**画面になるような動きを作りたいです。

またどのようにsegueを繋げばいいのかわかりません。

該当のソースコード

Swift

1import UIKit 2import Firebase 3 4 5 6class AccountViewController: UIViewController { 7 8 9 @IBOutlet var emailTextField: UITextField! 10 @IBOutlet var passwordTextField: UITextField! 11 @IBOutlet var usernameTextField: UITextField! 12 13 var auth: Auth! 14 15 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 auth = Auth.auth() 20 emailTextField.delegate = self 21 passwordTextField.delegate = self 22 usernameTextField.delegate = self 23 24 } 25 26 27 override func viewDidAppear(_ animated: Bool) { 28 super.viewDidAppear(animated) 29 if auth.currentUser != nil { 30 auth.currentUser?.reload(completion: { error in 31 if error == nil { 32 if self.auth.currentUser?.isEmailVerified == true { 33 self.performSegue(withIdentifier: "Home", sender: self.auth.currentUser!) 34 } else if self.auth.currentUser?.isEmailVerified == false { 35 let alert = UIAlertController(title: "確認用メールを送信しているので確認をお願いします。", message: "まだメール認証が完了していません。", preferredStyle: .alert) 36 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 37 self.present(alert, animated: true, completion: nil) 38 } 39 } 40 }) 41 } 42 } 43 44 45 46 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 47 if segue.identifier == "Home" { 48 segue.destination.modalPresentationStyle = .fullScreen 49 let nextViewController = segue.destination as! HomeViewController 50 let user = sender as! User 51 nextViewController.me = AppUser(data: ["userID" : user.uid]) 52 } 53 } 54 55 56 57 58 @IBAction func registerAccount(_ sender: Any) { 59 let email = emailTextField.text! 60 let password = passwordTextField.text! 61 let username = usernameTextField.text! 62 auth.createUser(withEmail: email, password: password) { (result, error) in 63 if error == nil, let result = result { 64 result.user.sendEmailVerification(completion: { (error) in 65 if error == nil { 66 let alert = UIAlertController(title: "仮登録を行いました。", message: "入力したメールアドレス宛に確認メールを送信しました。", preferredStyle: .alert) 67 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 68 self.present(alert, animated: true, completion: nil) 69 } 70 }) 71 } 72 } 73 } 74 75} 76 77extension AccountViewController: UITextFieldDelegate { 78 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 79 textField.resignFirstResponder() 80 return true 81 } 82} 83 84

補足情報(FW/ツールのバージョンなど)

今こんな感じになります。

動画

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

segueをコードから実装できているので、

確認してくださいのviewの
viewWillAppearかviewDidAppearで

Swift

1if auth.currentUser != nil { 2 // ユーザーのログインができた時の処理 3} else { 4 // ユーザーのログインができなかった時の処理 5} 6

の中に遷移を書けばいいのではないですか?
printを用い、きちんと意図したタイミングで呼ばれるか
確認してくださいね。

追記

ちょっと手元で確認してないので、確かなことを言えないですが、
アカウントの新規登録と、ログインは別のことなので、
新規登録しても、auth.currentUserはnilのままかもしれません。
つまり、新たにログインが必要かもしれません。

それを考慮すると、
新規登録画面→メール確認ください画面
↑↓
(初期画面)ログイン画面→メインコンテンツ

の構成はいかがですか?
よくある有名なサービスを参考に真似てみるのも手だと思います。
LINEやInstagram, tweeter, facebookなど。

投稿2019/12/10 13:39

編集2019/12/10 16:35
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問