第三方登陆组件

GitHub 中搜索:social django app ==>找到: python-social-auth/social-app-django
文档: https://python-social-auth.readthedocs.io/en/latest/

# 1. 安装
pip install social-auth-app-django

# django 配置: https://python-social-auth.readthedocs.io/en/latest/configuration/django.html

# 2. 添加到 INSTALLED_APPS
INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

# 3. 数据库迁移:第三方登陆的时候,会新建一些额外的数据表
python manage.py migrate  # 直接 migrate,不用 makemigrations,因为 migrations文件已经生成好了 

# 4. settings 中配置 AUTHENTICATION_BACKENDS (在源码中查看:social_core/backends)
AUTHENTICATION_BACKENDS = (
    ...
    "social_core.backends.weibo.WeiboOAuth2", # 所要添加的第三方登陆;如果还需要其它的第三方登陆,下面可继续添加
    "social_core.backends.qq.QQOAuth2",
    "social_core.backends.weixin.WeixinOAuth2",
    'django.contrib.auth.backends.ModelBackend',
    ...
)

# 5. 配置 URL
urlpatterns = patterns('',
    ...
    url('', include('social_django.urls', namespace='social')), # 第三方登陆URL;如果已经有用户登陆,则会将第三方登陆的用户和当前用户绑定,否则第三方登陆后将在你的网站上新创建一个用户
    ...
)

# 6. 对于 Django 的 MTV模式,设置 template
<a href="{% url "social:begin" "weibo" %}">微博</a>  # social:begin social表示名称空间,begin表示 name="begin"的那个url;
<a href="{% url "social:begin" "google-oauth2" %}">Google+</a>

# 7. 配置 Template Context Processors
TEMPLATES = [
    {
        ...
        'OPTIONS': {
            ...
            'context_processors': [
                ...
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                ...
            ]
        }
    }
]

# 8. 在setting中设置 APP key 和 APP secret
SOCIAL_AUTH_WEIBO_KEY = 'weiboappkey...'
SOCIAL_AUTH_WEIBO_SECRET = 'weiboappsecret...'

# 9. 第三方登陆成功后的跳转
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

# 10. 对于前后端分离的项目使用 python-social-auth/social-app-django(GitHub上的搜索名),需要在第三方包 social_core/actions.py 中的 do_complete() 方法中修改源码(即第三方认证完成后要把 JWT 和 username 通过set_cookie返回给前端),如下:
from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler
def do_complete(backend, login, user=None, redirect_name='next',
                *args, **kwargs):
    ...
    response = backend.strategy.redirect(url)  # 完成第三方登陆后,所要重定向的URL

    # 前后端分离的项目中,需要把 JWT 添加到cookie中返回给前端
    payload = jwt_payload_handler(user)
    response.set_cookie("token",jwt_encode_handler(payload),max_age=7*24*3600)  # 设置 cookie;一定要加过期时间 max_age
    response.set_cookie("name",user.name if user.name else user.username,max_age=7*24*3600)
    return response

    
# 注:微博第三方登陆时,授权回调页的 地址一定要和本机的IP地址保持一致(如果是在服务器上,就和服务器的IP地址保持一致),如:127.0.0.1:8000/complete/weibo/  这个回调页是由微博向你的 浏览器 发送了一个重定向的命令;而支付宝的 notify_url 是 支付宝向你的 服务器 发送了一个Post请求

 

转载于:https://www.cnblogs.com/neozheng/p/9888573.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现第三方登录功能,我们可以使用Spring Security 6.x系列的扩展篇之一,集成第三方登录组件justauth。 JustAuth是一个简洁而高效的开源第三方登录组件,在实现第三方登录的过程中,它充分考虑了安全性和易用性。为了集成JustAuth,我们需要进行以下步骤: 1. 添加JustAuth的依赖:在项目的构建配置文件中,添加JustAuth的依赖项。这可以通过Maven或者Gradle来完成。 2. 配置JustAuth:在项目的配置文件中,配置JustAuth的相关参数。这包括相关的第三方登录平台的clientId、clientSecret等信息。 3. 创建登录入口:在应用程序中,创建一个登录入口页面,该页面展示了不同第三方登录平台的图标。用户可以点击这些图标来选择他们要使用的第三方登录平台。 4. 处理授权回调:当用户选择了一个第三方登录平台并完成授权后,第三方登录平台将会重定向用户到我们预先配置的回调URL上。在该URL上,我们需要编写代码来处理回调,并获取到用户的信息。 5. 用户信息处理:在第四步中获取到用户的信息后,我们可以根据业务需求,将用户信息保存到数据库中,或者在数据库中查询该用户的信息。 通过以上步骤,我们就可以集成JustAuth,并实现第三方登录的功能。在实际开发中,我们还可以根据业务需求,对第三方登录进行安全性加固,例如加入验证码、防止重复登录等功能。 总结起来,Spring Security 6.x系列的扩展篇之集成第三方登录组件JustAuth可以帮助我们轻松实现第三方登录功能,提高用户登录的便捷性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值