2017-02-21 10 views
0

私はthis codeを使用しました。 ID、シークレット、コールバックURL、ローカルデータベースのすべてを記入しました。私のウェブサイトでFacebookのログインからメールの範囲を取得することができません

私は「http://localhost:3000/」に自分のFacebookアプリのURLを設定して、私は「http://localhost:3000/」と「http://localhost:3000/auth/facebook/callback

の両方を試したWebサイトのURLのためにも私は8080から3000にアプリのポートを変更それにマッチする。

ログインをクリックするたびに、サーバーがクラッシュし、mongooseのノードモジュールのどこかにキャッチされていないエラーがあり、「未定義のプロパティ0を読み取れませんでした」と伝えられました。 (newUser.facebook.email = profile.emails [0] .value;)ので、電子メールスコープにアクセスする権限がありませんでしたので、その行をコメントアウトしようとしました。

この行をコメントアウトすると、ログイン時にサーバーがクラッシュすることはなく、プロファイルページにリダイレクトされたときにトークン、ID、およびdisplayNameが取得されました。

私は電子メールを要求しないが、そのコード行を追加して電子メールを要求するとログインが失敗する。

私はこのような "電子メール" 範囲要求だ:

app.get( "/ AUTH /フェイスブック"、passport.authenticate( "フェイスブック" を、{範囲:[ "電子メール"]} ));

私は前の質問を検索しましたが、私が探していたものが見つかりませんでした。私に何ができる?

答えて

1

read property 0 of undefinedprofile.emails[0].valueは、profileemailsというプロパティを持たないことを意味します。

私はそれが単一のプロファイルであるため、emailであり、emailsではないと仮定しています。さらに、それは単一の電子メールであり、電子メールの配列ではありません。

profileオブジェクトを印刷し、オブジェクトのプロパティを確認できます。次に、必要な適切なプロパティを使用します。

+0

私はそれを試してみます、ありがとう。 ID:ID ユーザ名:未定義 のdisplayName:名前 名:FamilyNameで、middleNameとgivenName属性を持つオブジェクト、すべての未定義 – Metsuryu

+0

OK、私は、これは "プロファイル" にあるものであること、そして試してみました。 性別:未定義 profileUrl:未定義 プロバイダ:facebook _rawおよび_json:displayNameおよびidを持つオブジェクト。 だから私は全くメールを受け取っていません。私は電子メールの範囲を正しく要求していないからだと思いますか?どうすれば修正できますか? – Metsuryu

+1

私はここで暗闇の中で撮影しています。あなたがアクセスしようとしているFacebookのユーザーはあなたのアプリにアクセス許可を与えておく必要があります。 – devxeq

0

修正済みです。

私はそれが引用here

に答えましたが見つかりました:FacebookのグラフAPIv2.4から

を、我々は明示的 GETにフィールドを指定する必要があります。これは私が読んpassport.jsドキュメントではなく、いくつかの理由について

passport.use(new FacebookStrategy({ 
    clientID: config.facebook.clientID, 
    clientSecret: config.facebook.clientSecret, 
    callbackURL: config.facebook.callbackURL, 
    profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'], 
}, 

だからグラフAPI v2.4デベロッパー

の紹介、我々は次のように書くことができます。

関連する問題