我是 node js 的初學者。我想使用 jwt (jsonwebtoken) 創建一個身份驗證服務器。問題是當我在郵遞員中使用正確的令牌方法 POST 測驗我的端點“/api/posts?authorisation=Bearer token...”時,它給了我禁止的。這是我的代碼:
const express = require('express')
const jwt = require('jsonwebtoken')
const app = express()
app.get("/api", (req, res) => {
res.json({
message: "Hey there!!!"
})
})
app.post('/api/posts', verifyToken, (req, res) => {
jwt.verify(req.token, "secretkey", (err, authData) => {
if (err) {
res.sendStatus(403) //forbidden
res.send(`<h2>${err}</h2>`)
} else {
res.json({
message: "Post Created...",
authData
})
}
})
})
app.post('/api/login', (req, res) => {
const user = {
id: 1,
username: "John",
email: "[email protected]"
}
jwt.sign({ user: user }, "secretkey", (err, token) => {
res.json({
token
})
})
})
function verifyToken(req, res, next) {
const bearerHeader = req.headers["authorization"]
if (typeof bearerHeader !== "undefined") {
const bearerToken = bearerHeader.split(" ")[1]
req.token = bearerToken
next()
} else {
res.sendStatus(403) //forbidden
}
}
app.listen(5000, () => {
console.log("Server is running :)")
})
我希望它能夠作業,因為我是從教程中帶來的。
uj5u.com熱心網友回復:
您的代碼有效

問題出在您的請求呼叫中:
根據 oauth2 規范,授權令牌應該是標頭,您的代碼期望

因此,令牌應該作為 http 標頭發送,而不是像foo/bar?authorization=Bearer token...".
這里有一些樣本
郵差

Axios (javascript)
let webApiUrl = 'example.com/getStuff';
let tokenStr = 'xxyyzz';
axios.get(webApiUrl,
{ headers: { "Authorization": `Bearer ${tokenStr}` } });
建議
- 閱讀 oauth2 和 jwt
- 在中間件中執行令牌驗證,以避免對每個路由進行驗證
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529539.html
標籤:节点.js表示jwt
