{"id":812,"date":"2022-04-11T16:26:36","date_gmt":"2022-04-11T08:26:36","guid":{"rendered":"http:\/\/47.98.165.52\/?p=812"},"modified":"2022-04-11T16:26:36","modified_gmt":"2022-04-11T08:26:36","slug":"django%e6%b7%bb%e5%8a%a0token","status":"publish","type":"post","link":"\/?p=812","title":{"rendered":"django\u6dfb\u52a0token"},"content":{"rendered":"<h3>1.\u6982\u5ff5<\/h3>\n<p>\u5ba2\u6237\u7aef\uff1a\u9891\u7e41\u8bf7\u6c42\u547c\u53eb<\/p>\n<p>\u670d\u52a1\u7aef\uff1a\u9891\u7e41\u7684\u533a\u6570\u636e\u5e93\u67e5\u8be2\u7528\u6237\u540d\u548c\u5bc6\u7801\u8fdb\u884c\u6821\u9a8c\uff0c\u589e\u52a0\u670d\u52a1\u5668\u538b\u529b<\/p>\n<p>\u5f53\u767b\u9646\u6210\u529f\u540e\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u67d0\u6bb5\u65f6\u95f4\u5185\uff0c\u7ef4\u6301\u767b\u9646\u72b6\u6001\uff0c\u4e0d\u9700\u8981\u91cd\u590d\u7684\u8fdb\u884c\u7528\u6237\u540d\u548c\u5bc6\u7801\u7684\u6821\u9a8c\uff0ctoken\u5e94\u8fd0\u800c\u751f<\/p>\n<p>token:\u670d\u52a1\u7aef\u751f\u6210\u7684\u4e00\u4e32\u5b57\u7b26\u4e32\uff0c\u5ba2\u6237\u7aef\u8bf7\u6c42\u7684\u4ee4\u724c<\/p>\n<p>\u200b           \u5ba2\u6237\u7aef\u7b2c\u4e00\u6b21\u767b\u9646\u540e\uff0c\u670d\u52a1\u5668\u751f\u6210\u4e00\u4e2atoken,\u4ee5\u540e\u5ba2\u6237\u7aef\u8bf7\u6c42\u6570\u636e\uff0c\u53ea\u9700\u643a\u5e26token<\/p>\n<h3>2.\u5b89\u88c5<\/h3>\n<p>\u57fa\u4e8ejwt\u6807\u51c6\u7684token<\/p>\n<pre><code class=\"language-bash\">pip3 install pyjwt<\/code><\/pre>\n<h3>3.\u7ec4\u6210<\/h3>\n<p>header.payload.signature<\/p>\n<pre><code class=\"language-python\"># header\n# 1.alg\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5982\u679c\u662f\u672a\u52a0\u5bc6\u7684token,\u8bbe\u7f6e\u6210None\uff1b2.\u7c7b\u578btyp\nheaders = {&#039;alg&#039;: &#039;HS256&#039;, &#039;typ&#039;: &#039;JWT&#039;}\n# payload\n&quot;&quot;&quot;\niss: issuer jwt\u7b7e\u53d1\u8005\nsub: sunbject jwt\u9762\u5411\u7684\u7528\u6237\nexp: expiration time jwt\u7684\u8fc7\u671f\u65f6\u95f4\uff0c\u6ce8\u610f\uff0c\u5fc5\u987b\u5927\u4e8e\u7b7e\u53d1\u65f6\u95f4\niat: issued at jwt\u7684\u7b7e\u53d1\u65f6\u95f4\n&quot;&quot;&quot;\nfrom datetime import datetime, timedelta\npayload = {\n    &#039;iss&#039;: &#039;LoginView_post&#039;, \n    &#039;sub&#039;: &#039;login&#039;, \n    &#039;iat&#039;: int(datetime.now().timestamp()), \n    &#039;exp&#039;: datetime.now()+timedelta(days=1), \n    &#039;data&#039;: &#039;lee@qq.com&#039;\n          }\n\n# signature\nheader.payload\u901a\u8fc7header\u91cc\u9762\u58f0\u660e\u7684\u7b97\u6cd5\u8fdb\u884c\u52a0\u76d0\uff08secret_key\uff09\u7ec4\u5408\u52a0\u5bc6\n# \u751f\u6210token\nTOKEN_SECRET_KEY = &#039;feifei_FFmall&#039; # \u968f\u673a\u6307\u5b9a\u52a0\u76d0\u5bc6\u94a5\nencode_jwt = jwt.encode(payload, TOKEN_SECRET_KEY, algorithm=&#039;HS256&#039;, headers=headers)\n# \u62c6\u89e3token\njwt.decode(encode_jwt, TOKEN_SECRET_KEY, algorithms=[&#039;HS256&#039;])<\/code><\/pre>\n<h3>4.\u5e94\u7528<\/h3>\n<pre><code class=\"language-python\">import jwt\nfrom datetime import datetime, timedelta\nclass LoginView(View):\n    @method_decorator(verifyParam(&#039;email&#039;, &#039;password&#039;, &#039;verify&#039;))\n    def post(self, request, uuid):\n        post = request.POST\n        email = post.get(&#039;email&#039;)\n        password = post.get(&#039;password&#039;)\n        verify = post.get(&#039;verify&#039;)\n        ...\n        payload = {\n                    &#039;iss&#039;: &#039;LoginView_post&#039;,\n                    &#039;sub&#039;: &#039;login&#039;,\n                    &#039;iat&#039;: int(datetime.now().timestamp()),\n                    &#039;exp&#039;: datetime.now()+timedelta(days=1),\n                    &#039;data&#039;: email,\n                }\n                # \u7f16\u7801token\n                encode_jwt = jwt.encode(payload, token_conf.TOKEN_SECRET_KEY, algorithm=&#039;HS256&#039;, headers=token_conf.headers)\n                # \u6821\u9a8c\u901a\u8fc7\u540e\uff0c\u8fd4\u56de\u6210\u529f\n        return ResFormat(data=encode_jwt).json_response()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1.\u6982\u5ff5 \u5ba2\u6237\u7aef\uff1a\u9891\u7e41\u8bf7\u6c42\u547c\u53eb \u670d\u52a1\u7aef\uff1a\u9891\u7e41\u7684\u533a\u6570\u636e\u5e93\u67e5\u8be2\u7528\u6237\u540d\u548c\u5bc6\u7801\u8fdb\u884c\u6821\u9a8c\uff0c\u589e\u52a0\u670d\u52a1\u5668\u538b\u529b \u5f53\u767b\u9646\u6210\u529f\u540e\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u67d0\u6bb5\u65f6\u95f4\u5185\uff0c\u7ef4\u6301   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[17],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/812"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=812"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/812\/revisions"}],"predecessor-version":[{"id":813,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/812\/revisions\/813"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=812"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}