@@ -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+
267349def get_oauth_apps ():
268350 applications = BaseOauthManager .__subclasses__ ()
269351 return list (map (lambda x : x (), applications ))
0 commit comments