繁体   English   中英

如何将JWT设置为存储在本地存储中,以便我的域的所有部分都可以访问它?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM