Skip to content

Commit d65284f

Browse files
committed
增加Facebook登录支持
1 parent 1c77597 commit d65284f

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

DjangoBlog/settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,11 @@
217217
'appkey': os.environ.get('GITHUB_APP_KEY'),
218218
'appsecret': os.environ.get('GITHUB_APP_SECRET'),
219219
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=github'
220+
},
221+
'facebook': {
222+
'appkey': os.environ.get('FACEBOOK_APP_KEY'),
223+
'appsecret': os.environ.get('FACEBOOK_APP_SECRET'),
224+
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=facebook'
220225
}
221226
}
222227

oauth/oauthmanager.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,88 @@ def get_oauth_userinfo(self):
264264
return None
265265

266266

267+
class FaceBookOauthManager(BaseOauthManager):
268+
AUTH_URL = 'https://www.facebook.com/v2.10/dialog/oauth'
269+
TOKEN_URL = 'https://graph.facebook.com/v2.10/oauth/access_token'
270+
API_URL = 'https://graph.facebook.com/me'
271+
ICON_NAME = 'facebook'
272+
273+
def __init__(self, access_token=None, openid=None):
274+
self.client_id = settings.OAHUTH['facebook']['appkey']
275+
self.client_secret = settings.OAHUTH['facebook']['appsecret']
276+
self.callback_url = settings.OAHUTH['facebook']['callbackurl']
277+
super(FaceBookOauthManager, self).__init__(access_token=access_token, openid=openid)
278+
279+
def get_authorization_url(self, nexturl='/'):
280+
params = {
281+
'client_id': self.client_id,
282+
'response_type': 'code',
283+
'redirect_uri': self.callback_url, # + '&next_url=' + nexturl,
284+
'scope': 'email,public_profile'
285+
}
286+
url = self.AUTH_URL + "?" + urllib.parse.urlencode(params)
287+
return url
288+
289+
def get_access_token_by_code(self, code):
290+
params = {
291+
'client_id': self.client_id,
292+
'client_secret': self.client_secret,
293+
# 'grant_type': 'authorization_code',
294+
'code': code,
295+
296+
'redirect_uri': self.callback_url
297+
}
298+
rsp = self.do_post(self.TOKEN_URL, params)
299+
300+
try:
301+
obj = json.loads(rsp)
302+
token = str(obj['access_token'])
303+
self.access_token = token
304+
return self.access_token
305+
except:
306+
return None
307+
308+
def get_oauth_userinfo(self):
309+
params = {
310+
'access_token': self.access_token,
311+
'fields': 'id,name,picture,email'
312+
}
313+
try:
314+
rsp = self.do_get(self.API_URL, params)
315+
datas = json.loads(rsp)
316+
user = OAuthUser()
317+
user.nikename = datas['name']
318+
user.openid = datas['id']
319+
user.type = 'facebook'
320+
user.token = self.access_token
321+
if datas['email']:
322+
user.email = datas['email']
323+
if datas['picture'] and datas['picture']['data'] and datas['picture']['data']['url']:
324+
user.picture = str(datas['picture']['data']['url'])
325+
return user
326+
except Exception as e:
327+
logger.warn(e)
328+
return None
329+
330+
"""
331+
params = {
332+
'input_token': self.access_token,
333+
'access_token': self.client_id + '|' + self.client_secret
334+
}
335+
url = 'https://graph.facebook.com/debug_token' # + urllib.parse.urlencode(params)
336+
rsp = self.do_get(url, params)
337+
try:
338+
obj = json.loads(rsp)
339+
userid = str(obj["data"]["user_id"])
340+
url = 'https://graph.facebook.com/v2.6/' + userid
341+
params = {'access_token': self.access_token}
342+
rsp = self.do_get(url, params)
343+
print(rsp)
344+
except:
345+
pass
346+
"""
347+
348+
267349
def get_oauth_apps():
268350
applications = BaseOauthManager.__subclasses__()
269351
return list(map(lambda x: x(), applications))

travis_test/travis_settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,11 @@
216216
'appkey': 'githubappkey',
217217
'appsecret': 'githubappsecret',
218218
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=github'
219+
},
220+
'facebook': {
221+
'appkey': 'facebookappkey',
222+
'appsecret': 'facebookappsecret',
223+
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=facebook'
219224
}
220225
}
221226

0 commit comments

Comments
 (0)