Facebook Graph API.
我正在请求电子邮件权限,除了一些用户之外它一切正常,json不返回电子邮件字段.我不确定为什么会这样.代码是相同的,它适用于所有用户,返回电子邮件字段,除了100个左右的用户,在json中没有此字段的用户.所有其他领域都在那里.
以前有人遇到过这个问题吗?
我检查了facebook隐私设置,如果用户授予Facebook应用程序的电子邮件访问权限,则没有任何东西阻止电子邮件进入json,但这种情况发生在我身上.我在网上搜索,似乎没有其他人面临这个问题.
任何提示都将不胜感激
更新似乎我的个人电子邮件地址已经使用多年了.Facebook将其标记为非活动状态,并且未将其作为JSON的一部分返回.
我使用此URL在客户端使用Facebook验证用户身份:
https://www.facebook.com/dialog/oauth?
client_id=xxx&
redirect_uri=https://www.facebook.com/connect/login_success.html&
scope=email
Run Code Online (Sandbox Code Playgroud)
我收到一个代码然后交换一个令牌:
https://graph.facebook.com/oauth/access_token?
code=xxx&
client_id=xxx&
client_secret=xxx&
redirect_uri=xxx
Run Code Online (Sandbox Code Playgroud)
然后我将令牌发送到我的服务器,然后我获取Fb Graph以获取一些用户信息,包括电子邮件.
https://graph.facebook.com/me?access_token=xxx
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我得到所有用户'关于'信息,但不是他/她的电子邮件!
我做错了什么?
我有权访问用户的电子邮件.该脚本工作正常.有数千条记录,都有正确的电子邮件,但其中一些有空字符串(5:1000).
我知道,如果用户拒绝透露他的电子邮件,那么Facebook会生成一个临时的电子邮件.因此,情况并非如此.
怎么了?没有电子邮件地址的用户可以吗?
我正在进行狂欢3.0安装(ROR)并尝试使用facebook oauth进行身份验证,但是在成功的oauth之后发回的字段,不包含对我们的应用程序至关重要的电子邮件.这是从facebook成功验证返回的.
#<OmniAuth::AuthHash credentials=#<OmniAuth::AuthHash expires=true expires_at=1442435073 token="CAAJa3dyBtY4BAJ2ZB3vrenNOFJKSMtvxYO09ZCJtEsmKNBs90q9nmUF4LIBr06xCizEAR3lwht3BwycLkVFdjlvkS1AUGpYODQHu25K0uO8XLDDPkTO0E9oPdIILsbTTOuIT7qcl8nJ6501z0dCXEi9hVNwPYqZBbGqiEhyoLyVgCNnDWdPRLBRF5xSovJdhjjCf6XC8ulJ4NnKBfM8"> extra=#<OmniAuth::AuthHash raw_info=#<OmniAuth::AuthHash id="101230990227589" name="David Alajbbjfdjgij Bowersstein">> info=#<OmniAuth::AuthHash::InfoHash image="http://graph.facebook.com/101230990227589/picture" name="David Alajbbjfdjgij Bowersstein"> provider="facebook" uid="101230990227589"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到的只是用户名和他们的ID.在我的Facebook应用程序上是否有一些设置需要检查以便收回电子邮件?或者我有不同的方式做Oauth?我只是使用spree_social gem,它在内部完成这一切所以我实际上并没有编写任何代码.
这是代码.复制出宝石,我只是添加了日志行,看看从Facebook回来的东西.
def #{provider}
authentication = Spree::UserAuthentication.find_by_provider_and_uid(auth_hash['provider'], auth_hash['uid'])
if authentication.present? and authentication.try(:user).present?
flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
sign_in_and_redirect :spree_user, authentication.user
elsif spree_current_user
spree_current_user.apply_omniauth(auth_hash)
spree_current_user.save!
flash[:notice] = I18n.t('devise.sessions.signed_in')
redirect_back_or_default(account_url)
else
user = Spree::User.find_by_email(auth_hash['info']['email']) || Spree::User.new
user.apply_omniauth(auth_hash)
Rails.logger.debug("THE AUTO HASH")
Rails.logger.debug(auth_hash.inspect)
if user.save
flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
sign_in_and_redirect :spree_user, user
else
session[:omniauth] = auth_hash.except('extra')
flash[:notice] = Spree.t(:one_more_step, kind: auth_hash['provider'].capitalize)
redirect_to …Run Code Online (Sandbox Code Playgroud) 我使用Facebook登录我的应用程序.(Facebook iOS SDK版本3.11.1)
我要求"电子邮件"许可:
NSArray *permissions = [NSArray arrayWithObjects: @"basic_info", @"email", nil];
Run Code Online (Sandbox Code Playgroud)
大多数时候,我确实得到了用户的电子邮件:
NSString *email = [user objectForKey:@"email"];
//user is (NSDictionary<FBGraphUser> *)
Run Code Online (Sandbox Code Playgroud)
有时我只是不这样做.(我可以看到NSDictionary不包括电子邮件).
我正在使用此修复程序,因此当我稍后使用电子邮件时,应用程序将不会终止,并且其nil:
NSString *email = [user objectForKey:@"email"] ? [user objectForKey:@"email"] : @"NO_EMAIL";
Run Code Online (Sandbox Code Playgroud)
但我需要真正的邮件,所以我必须提出一个新的解决方案.我没有注意到有问题的用户有什么特别之处.任何想法可能是什么问题?
我是使用Swift快速学习的自学开发iPhone应用程序。我正在设计一个使用FBSDK进行Facebook身份验证的登录页面。我已经成功实现了登录和注销的登录按钮。它返回用户名和ID,但无法绘制用户电子邮件ID的图形,并显示代码2500错误。另外,我无法使用新用户登录。它会自动以同一用户登录。
这是错误:
UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
body = {
error = {
code = 2500;
"fbtrace_id" = BimF4Nuqx0v;
message = "An active access token must be used to query information about the current user.";
type = OAuthException;
};
};
code = 400;
}})
Successfully logged in with Facebook...
123
result Optional({
id = 120008981838163;
name = "Nisha Ios";
})
Did Logout of Facebook
Run Code Online (Sandbox Code Playgroud)
这是我在AppDelegate.swift中的代码:
import UIKit …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序(SDK 3.5)中登录了facebook并希望获得用户的电子邮件.这是我的"核心"登录代码,我相信我正在设置要求的正确权限:
NSArray *permissions = [NSArray arrayWithObjects:@"email", @"user_location", nil];
[FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
// some code here
}];
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试从他们/我的数据中读取用户电子邮件时,它实际上适用于大多数用户.除了一些,我仍然没有收到电子邮件.
我在这里错过了什么吗?我想当用户授予此请求时,我总是会收到一个电子邮件地址(即使它是匿名电子邮件).或者只是一个Facebook设置,用户可以完全关闭它?