URL无法使用One-Time-Token

时间:2018-01-28 15:38:58

标签: django django-rest-framework token

我正在尝试构建一个登录系统,用户在注册后需要点击链接和激活电子邮件。我在方法中创建令牌:

def get_context_data(
        self, request, user, context=None):
    if context is None:
        context = dict()
    current_site = get_current_site(request)
    if request.is_secure():
        protocol = 'https'
    else:
        protocol = 'http'
    token = token_generator.make_token(user)
    uid = urlsafe_base64_encode(
        force_bytes(user.pk))
    context.update({
        'domain': current_site.domain,
        'protocol': protocol,
        'site_name': current_site.name,
        'token': token,
        'uid': uid,
        'user': user,
    })
    return context

这里的问题是生成的令牌如下所示:

http://127.0.0.1:8000/user/activate/b'NjA'/4t8-9fad2c2dc78ecf8a1228/

网址无效,因为urlsafe_base64_encode(force_bytes(user.ok)) 生成一些在网址中不起作用的已经使用的字符组合。我收到以下错误。

  

找不到页面(404)请求方法:GET   请求网址:http://127.0.0.1:8000/user/activate/b&

正如您所看到的,网址在#&amp ;.之后被切断了。 如何以可在网址中使用的方式对user.pk进行编码?

1 个答案:

答案 0 :(得分:0)

任何人都应该遇到同样的问题。问题是对python 2.0的更新

这解决了它: Django 2, python 3.4 cannot decode urlsafe_base64_decode(uidb64)