Django-第三方登录框架

Github:https://github.com/python-social-auth/social-app-django

教程文档:http://python-social-auth.readthedocs.io/en/latest/configuration/django.html


1.安装

pip install social-auth-app-django
2.配置

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

3.数据生成,直接migrate,因为源码中的 makemigrtasion 生成的数据库迁移文件已经存在了。会生成5张socia表,不用管

./manage.py migrate
4.配置中添加

下面是源码,google的第三方验证,不需要添加。

AUTHENTICATION_BACKENDS = (
    'social_core.backends.open_id.OpenIdAuth',
    'social_core.backends.google.GoogleOpenId',
    'social_core.backends.google.GoogleOAuth2',
    'social_core.backends.google.GoogleOAuth',
    'social_core.backends.twitter.TwitterOAuth',
    'social_core.backends.yahoo.YahooOpenId',
    ...
    'django.contrib.auth.backends.ModelBackend',
)
这里是基于微博,QQ,微信的第三方验证


AUTHENTICATION_BACKENDS = (
    #自定义设置jwt验证登录时候,可以匹配手机和密码(jwt认证接口默认匹配密码和账户)
    'users.views.CustomBackend',

    #第三方认证登录配置,微博、微信、QQ
    'social_core.backends.weibo.WeiboOAuth2',
    'social_core.backends.qq.QQOAuth2',
    'social_core.backends.weixin.WeixinOAuth',
    'django.contrib.auth.backends.ModelBackend',
)

5.在urls.py中配置URL

urlpatterns = patterns('',
    ...
    url('', include('social_django.urls', namespace='social'))
    ...
)

6.setting.py中配置

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            ...
            'context_processors': [
                ...
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                ...
            ]
        }
    }
]
7.基础配置完后需要在setting.py中设置appkey和回调网站

源码:

SOCIAL_AUTH_TWITTER_KEY = 'foobar'
SOCIAL_AUTH_TWITTER_SECRET = 'bazqux'
我的配置:

#第三方登录设置appkey和secret,根据开发平台的不同而不同
SOCIAL_AUTH_WEIBO_KEY = '23xxxxxxx'   #微博
SOCIAL_AUTH_TWITTER_SECRET = '2c60B652xxxxcxxxxxxxxx'  #微博

SOCIAL_AUTH_QQ_KEY = 'foobar'   #QQ
SOCIAL_AUTH_QQ_SECRET = 'bazqux'  #QQ

SOCIAL_AUTH_WEIXIN_KEY = 'foobar'   #微信
SOCIAL_AUTH_WEIXIN_SECRET = 'bazqux'  #微信

8.成功登陆后跳转页面设置

#第三方登录成功后跳转页面,这里跳转的主页
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

最后:

    登录跳转后,会自动生成一个用户,和该第三方用户绑定。

    由于项目的不同,不会直接登录,因为第三方框架是将数据存在了session中,而我的项目是用JWT机制保存token来实现登录,所以后续需要修改源码的方法。


1.拷贝源码文件夹(social_core)到extra_apps

2.修改extra_apps/actions.py/def do_complete函数

 

先导入库

from rest_framework_jwt.serializers import jwt_encode_handler, jwt_payload_handler

然后修改def do_complete函数

###############    修改了这个   #############
# return backend.strategy.redirect(url)
response = backend.strategy.redirect(url)
#根据username生成token
payload = jwt_payload_handler(user)
response.set_cookie('name',user.name if user.name else user.username,max_age=24 * 60 * 60)  #一定要设置过期时间
response.set_cookie('token',jwt_encode_handler(payload))
return response
 

最后完成第三方用户登录



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值