質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

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

Xcode

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

Swift

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

Q&A

解決済

2回答

1693閲覧

Type 'User' has no member '●●'エラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/12/14 14:46

編集2017/12/16 06:17

swift4
xcode9.1

iosアプリにgoogle認証を実装する動画を参考にしています。
まだコードを自ら書けるレベルでは無いので動画作成者さんのコードをとにかく追って真似ていますが、

Type 'User' has no member 'authentication'または
Type 'User' has no member 'user'のエラーが出ます。
( 場所は●guard let authentication = user.authentication else { return }●の所です)

このエラーは'---'が存在しない為のエラーの様ですが、原因が分かりません。
このLogInViewControllerで不備のある箇所を教えていただきたいです。
お願いします。

・追記
本文内のコード
guard let authentication = User.authentication else { return }から
guard let authentication = user.authentication else { return }に修正しました。

import UIKit import Firebase import FirebaseAuth import GoogleSignIn class LogInViewController: UITableViewController, GIDSignInUIDelegate { @IBOutlet weak var emailText: UITextField! @IBOutlet weak var passwordText: UITextField! @IBOutlet weak var googleSignInButton: GIDSignInButton! override func viewDidLoad() { super.viewDidLoad() GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().signIn() } override func viewDidAppear(_ animated: Bool) { if Auth.auth().currentUser?.uid != nil{goToHome() } } func login(){ Auth.auth().signIn(withEmail: emailText.text!, password:passwordText.text!,completion: { (user,error) in if error != nil{print(error!); return } self.goToHome() }) } func goToHome(){ } func sign(signIn: GIDSignIn!, didSignInForuser: GIDGoogleUser!,withError error: Error?) { // ... if let error = error { print(error);return } print("Signed into Google Successfully") guard let authentication = user.authentication else { return } let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken) Auth.auth()?.signIn(with: credential) { (user, error) in // ... if let error = error { print(error.localizedDescription) return } print("Signed into Firebase successfully") } } @IBAction func loginButtonAction(_ sender: Any) { login() } }

12/16 15:15追記しました。

下図の画像の通り、
guard let authentication = user.authentication else { return } のみを
Auth.auth()?.signIn(with: credential) { (user, error) in の下に移したのですが、
● Use of unresolved identifier 'authentication' ●エラーが出ました。

このエラーの原因が分からない為、
お分かりになる方、ご教授お願いします。

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

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

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

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

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

fuzzball

2017/12/15 00:33

Userって何なんでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/15 03:50

fuzzball様 失礼しました、userの間違いです。本文修正しました。
guest

回答2

0

credentialを作るにはauthenticationが必要でauthenticationを作るにはcredentialが必要とおかしなことになっているので調べてみました。

関数のラベルも間違えているようです。

swift

1// 最初の引数ラベルは'_'です。2番目の引数ラベルはdidSignInForです。 Forとuserの間の空白は必須です。 2func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { 3 4 if let error = error { 5 // エラー 6 return 7 } 8 9 guard let authentication = user.authentication else { return } 10 let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, 11 accessToken: authentication.accessToken) 12 13 14 // なにかする 15}

このガイドを見る限りではこれでいいようです。

投稿2017/12/16 08:13

MasakiHori

総合スコア3384

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

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

0

ベストアンサー

userじゃないかな…
(Userじゃなくて)

#追記
エラーの起きている行とその下の行は本来コールバックのブロック内に書くべきなのでは?
下記コード行の下に移してみてください。

swift

1Auth.auth()?.signIn(with: credential) { (user, error) in

投稿2017/12/14 14:57

編集2017/12/14 15:21
fromageblanc

総合スコア2724

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

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

退会済みユーザー

退会済みユーザー

2017/12/14 15:01 編集

fromageblanc様 小文字のuに変えると、Use of unresolved identifier 'user' とエラーが出ます。
退会済みユーザー

退会済みユーザー

2017/12/15 03:46

fromageblanc様 ありがとうございます。 下に移すと今度は上になった Auth.auth()?.signIn(with: credential) { (user, error) in で Use of unresolved identifier 'credential'エラーになりました。
fromageblanc

2017/12/15 04:46

ですよね。なので「エラーの起きている行とその下の行」と書きました。
退会済みユーザー

退会済みユーザー

2017/12/15 05:15

私の理解不足でしょうか? guard let authentication = user.authentication else { return } let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)が、エラーの起きている行とその下の行で間違い無いでしょうか?これらを Auth.auth()?.signIn(with: credential) { (user, error) inの下に移したのですが、エラーが出ています。 この方法は違うのでしょうか?
fromageblanc

2017/12/15 05:20

すいません。その下の行は移動なしでお願いします。
退会済みユーザー

退会済みユーザー

2017/12/15 05:33 編集

とんでもないです。 guard let authentication = user.authentication else { return } のみを Auth.auth()?.signIn(with: credential) { (user, error) in の下に移したのですが、 ● Use of unresolved identifier 'authentication' ●エラーが出ました。 何度も申し訳ないのですが、このエラーが出た let credential = GoogleAuthProvider... も何か別のコールバックのブロック内に書くという事でしょうか?
退会済みユーザー

退会済みユーザー

2017/12/17 08:35

もう少し調べて見ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問