美多商城项目借助JWT框架实现登录总结

本文总结了如何在美多商城项目中利用JWT框架进行用户登录处理,包括通过用户名或手机号登录,以及集成QQ第三方登录功能。
摘要由CSDN通过智能技术生成

登录

  • 借助JWT提供的登录视图
# 重写jwt_response_payload_handler方法, 自定义返回数据
response_data = jwt_response_payload_handler(token, user, request)
# 在utils中重写该方法
def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功返回数据
    """
    return {
        'token': token,
        'user_id': user.id,
        'username': user.username
    }
# 修改配置文件
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
}
  • 增加支持用户名和手机号均可作为登录账号
# 对authenticate进行重写, 让其可以根据username内容的不同, 用不同方式取出user对象
if all(credentials.values()):
            user = authenticate(**credentials)
  # 在utils中重写
  def get_user_by_account(account):
      """
      根据帐号获取user对象
      :param account: 账号,可以是用户名,也可以是手机号
      :return: User对象 或者 None
      """
      try:
          if re.match('^1[3-9]\d{9}$', account):
              # 帐号为手机号
              user = User.objects.get(mobile=account)
          else:
              # 帐号为用户名
              user = User.objects.get(username=account)
      except User.DoesNotExist:
          return None
      else:
          return user
  
  class UsernameMobileAuthBackend(ModelBackend):
      """
      自定义用户名或手机号认证
      """
      def authenticate(self, request, username=None, password=None, **kwargs):
          user = get_user_by_account(username)
          if user is not None and user.check_password(password):
              return user
  # 配置文件中告知自定义的认证后端      
  AUTHENTICATION_BACKENDS = [
      'users.utils.UsernameMobileAuthBackend',
  ]
  • 第三方登录, QQ登录
class QQAuthURLView(APIView):
    def get(self, request):
        next = request.query_params.get('state')
        if not next:
            next = '/'
        # 
        oauth = 						     OAuthQQ(client_id=dev.QQ_CLIENT_ID,client_secret=dev.QQ_CLIENT_SECRET,redirect_uri=dev.QQ_REDIRECT_URI,state=next)
        login_url = oauth.get_qq_url()
        return Response({'login_url':login_url})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值