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

登录

  • 借助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})

猜你喜欢

转载自blog.csdn.net/weixin_44402898/article/details/88239375
今日推荐