使用Facebook唯一号码(UID)获取用户的电子邮件地址涉及到使用Facebook的Graph API。需要注意的是,获取用户的电子邮件地址需要用户的明确授权,并且需要适当的权限(email
权限)。以下是一个详细的步骤指南,帮助你完成这一任务。
首先,你需要创建一个Facebook应用,以便获取访问令牌(Access Token)来调用Graph API。
为了访问用户的电子邮件地址,你需要获取用户的授权,并请求email
权限。你可以使用Facebook的OAuth对话框来完成这一任务。
<a href="https://www.facebook.com/v10.0/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&state={state-param}
&scope=email">Login with Facebook</a>
替换 {app-id}
和 {redirect-uri}
为你的应用ID和重定向URI。
用户授权后,Facebook会重定向到你指定的重定向URI,并附带一个授权码。你需要使用这个授权码来获取访问令牌。
import requests
def get_access_token(app_id, app_secret, redirect_uri, code):
url = 'https://graph.facebook.com/v10.0/oauth/access_token'
params = {
'client_id': app_id,
'redirect_uri': redirect_uri,
'client_secret': app_secret,
'code': code
}
response = requests.get(url, params=params)
return response.json().get('access_token')
使用获取到的访问令牌,你可以调用Graph API来获取用户的电子邮件地址。
def get_user_email(access_token):
url = 'https://graph.facebook.com/me'
params = {
'fields': 'email',
'access_token': access_token
}
response = requests.get(url, params=params)
return response.json().get('email')
以下是一个完整的示例,展示了如何从用户登录到获取电子邮件地址的整个流程。
import requests
from flask import Flask, request, redirect
app = Flask(__name__)
APP_ID = 'your-app-id'
APP_SECRET = 'your-app-secret'
REDIRECT_URI = 'your-redirect-uri'
@app.route('/')
def home():
return '''
<a href="https://www.facebook.com/v10.0/dialog/oauth?client_id={}&redirect_uri={}&scope=email">Login with Facebook</a>
'''.format(APP_ID, REDIRECT_URI)
@app.route('/callback')
def callback():
code = request.args.get('code')
access_token = get_access_token(APP_ID, APP_SECRET, REDIRECT_URI, code)
email = get_user_email(access_token)
return 'User email: {}'.format(email)
def get_access_token(app_id, app_secret, redirect_uri, code):
url = 'https://graph.facebook.com/v10.0/oauth/access_token'
params = {
'client_id': app_id,
'redirect_uri': redirect_uri,
'client_secret': app_secret,
'code': code
}
response = requests.get(url, params=params)
return response.json().get('access_token')
def get_user_email(access_token):
url = 'https://graph.facebook.com/me'
params = {
'fields': 'email',
'access_token': access_token
}
response = requests.get(url, params=params)
return response.json().get('email')
if __name__ == '__main__':
app.run(debug=True)
email
权限,并且用户在授权时同意了该权限。领取专属 10元无门槛券
手把手带您无忧上云