[英]How to set the token to local storage or cookies so that i can allow user to access certain web pages
[英]How do set JWT to be store in local storage so all parts of my domain can access it?
我正在为我的后端使用django休息框架并为我的前端做出反应。 我已设置前端,因此登录客户端在完全验证后会收到JSON令牌。 但是,我的后端 - 特别是API没有收到此JSON令牌。
这是我的url conf看起来像:
router = SimpleRouter()
router.register(r'accounts', accountsviews.UserViewSet, 'list')
router.register(r'groups', accountsviews.GroupViewSet)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^message/', homeviews.message, name="message"),
url(r'^stocks_api/', stocksviews.StockList.as_view()),
url(r'^passwordreset/', homeviews.passwordreset.as_view(), name='passwordreset'),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api-token-auth/', obtain_jwt_token),
url(r'^api-token-refresh/', refresh_jwt_token),
url(r'^api-token-verify/', verify_jwt_token),
url(r'^reset/done/$', passwordviews.reset_done, name='password_reset_done'),
url(r'^reset/(?P<token>[\w:-]+)/$', passwordviews.reset,
name='password_reset_reset'),
url(r'^', include(router.urls)),
url(r'^', homeviews.home, name='home'),
]
urlpatterns = format_suffix_patterns(urlpatterns)
我觉得问题可能是因为我的apis(stocks_api,accounts_api和groups_api)没有嵌套在r'^',homeviews.home中。 如果是这样,我将如何使JWT全球化,而不仅仅是针对网址?
您可能正在将JWT令牌保存在客户端的cookie中。要使该cookie可以在您的域中访问,您需要将路径设置为“/”。 在JavaScript中,它就像这个document.cookie = "jwt_token=yourtokenhashhere;path=/;domain=yourdomain.com";
。 我不知道django如何设置cookie ...但它应该是类似的东西。 搜索将令牌发送到客户端的代码部分,并确保为令牌cookie设置/的路径。
因为您的客户端将JWT令牌存储在本地存储中,所以Django只能通过request.user.is_authenicated知道用户是否经过身份验证 。 您可以在前端的每个请求的标题中包含您的JWT,然后通过Django的meta字段访问它。 request.META['JWT']
的缺点是它需要在每个请求中。
或者,您可以将jwt存储在cookie中。 您必须修改您的身份验证代码,以便在用户成功通过身份验证并生成jwt令牌之后,在返回该jwt令牌之前,您希望将其存储在会话中。 request.session['jwt_token']
然后可以在整个应用程序的任何视图中访问令牌。
验证,查看伪代码
def obtain_jwt_token(self, request):
jwt_token = jwt_authenticate(request.user, request.DATA['password'])
request.session['JWT'] = jwt_token
return (jwt_token)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.