【问题标题】:URL token authentication in DjangoDjango 中的 URL 令牌认证
【发布时间】:2016-08-08 16:10:46
【问题描述】:

我正在寻找一种可以向用户发送带有 URL 的电子邮件的方法,该 URL 将使他们登录到他们的用户中。这甚至不一定要过期。我在会议上发现了大量的材料,但这不是我所追求的。我需要的是这个:

  • 用户向网站提交内容
  • 他们在后台创建了一个帐户
  • 已发送一封电子邮件,其中包含“site.com/&token=foobar23124123”链接
  • 用户可以使用该链接登录(可选:下周)

有什么我缺少的东西可以帮助我还是我必须实施自己的解决方案?我可以只包含来自 Django REST 框架的令牌的令牌吗?

感谢您花时间阅读我的问题。

我正在使用 Django 1.9 和 Python 2.7

【问题讨论】:

    标签: python django url authentication


    【解决方案1】:

    我不认为使用 url get-parameters 对用户进行身份验证。 AFAIK Django REST 框架的令牌使用 HTTP 标头作为令牌。

    您可以编写自己的身份验证后端,这很容易。这是一个例子

    我的项目/setting.py

    AUTHENTICATION_BACKENDS = [
        'myproject.backends.UrlTokenBackend',
        'django.contrib.auth.backends.ModelBackend'
    ]
    

    myproject/backends.py

    class UrlTokenBackend(ModelBackend):
        def authenticate(self, token):
            try:
                user = User.objects.get(token=token)
            except User.DoesNotExist:
                return None
    
            if not user.is_active:
                return None
    
            return user
    
        def get_user(self, user_id):
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None
    

    现在,当您调用 authenticatelogin 函数时,Django 将针对您的每个后端检查您的用户。您可以像这样手动登录用户(这是查看功能):

    from django.contrib.auth import authenticate, login
    
    def user_auth(request):
        token = request.GET.get('token')
        user = authenticate(token=token)
        login(request, user)
    
        return redirect('index')
    

    更新

    或者您可以使用 this hack 并仅执行此操作(无需自定义后端):

    def user_auth(request):
        token = request.GET.get('token')
        user = User.objects.get(token=token)
        user.backend = 'django.contrib.auth.backends.ModelBackend'
        login(request, user)
    
        return redirect('index')
    

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 2020-10-24
      • 2019-04-11
      • 2017-01-24
      • 2020-08-07
      • 2016-06-20
      • 2013-01-28
      • 2023-03-29
      • 2021-08-03
      相关资源
      最近更新 更多