我正在尝试构建一个登录系统,用户在注册后需要点击链接和激活电子邮件。我在方法中创建令牌:
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
进行编码?
答案 0 :(得分:0)
任何人都应该遇到同样的问题。问题是对python 2.0的更新
这解决了它: Django 2, python 3.4 cannot decode urlsafe_base64_decode(uidb64)