gpt4 book ai didi

javascript - 如何在 hapi.js 的路径上使用 hapi-auth-jwt2 身份验证?

转载 作者:行者123 更新时间:2023-11-30 19:42:08 26 4
gpt4 key购买 nike

我在 hapi.js 中使用访问 token 时遇到问题。我无法理解如何使用该 token 进行身份验证。我正在关注这篇文章 dwyl/hapi-auth-jwt2 .我正在使用 mongodb 作为我的数据库。但是直到我像这样发送我的请求http://localhost:8000/restricted?token=mycreatedtoken ,我无法登录到 {auth: 'jwt'} 页面。但是这样发送请求似乎不对。那么我该如何使用该 token 呢?我不必将其保存在本地存储或数据库中才能访问吗?这是我的代码:

app.js

 const jwt = require('jsonwebtoken');
await server.register(require('hapi-auth-jwt2'));

server.auth.strategy('jwt', 'jwt', {
key: 'NeverShareYourSecret',
validate: validate,
verifyOptions: { algorithms: ['HS256'] }
});
server.auth.default('jwt');

验证函数:

const validate = async (decoded, req) => {
let user = await User.findOne({ _id: decoded.id });
if (user) {
req.user = user;
return { isValid: true };
} else {
return { isValid: false };
}
};

用于登录:

method: 'POST',
path: '/login',
config: { auth: false },
handler: async function(req, h) {
try {
let { username, password } = req.payload;
let student = await student.findOne({
username
});
let validUser = student && (await bcrypt.compareSync(password,student.password));

if (validUser) {
let token = jwt.sign({ id: user.id }, 'mysecretkey');
console.log('tpken'+token);
// return h.view('welcome');
return { token };
} else {
return boom.unauthorized('incorrect pass');
}
}
}

注册

method: 'POST',
path: '/student',
config: { auth: false },
handler: async function(req, h) {
try {
let salt = bcrypt.genSaltSync(10);
req.payload.password = bcrypt.hashSync(req.payload.password, salt);

let student = new User(req.payload);
let result = await student.save();
const expiresIn = 24 * 60 * 60;
let token = jwt.sign({ id: result.id }, 'mysecretkey',{ expiresIn: expiresIn
});
return {token} ;

}
}

此路径使用 jwt token 。

 { 
method: 'GET',
path: '/register',
config: { auth: 'jwt' },
handler: async (request, h) => {
try {
return h.view('student');
} catch(err){
return h.response(err).code(500);
}
}
}

最佳答案

你能分享一下你的validate函数吗?我知道您可以生成 JWT token 。为了使用该 token 来验证您的请求,您需要将请求中带有“授权” header 的 token 发送到您的服务器。

我在前端使用 React,这是我将 JWT token 发送到服务器的设置。

import axios, {AxiosInstance} from 'axios';

const createClient: () => AxiosInstance = () => {
const options = {
baseURL: process.env.REACT_APP_API_URL,
responseType: 'json',
withCredentials: true,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': ''
},
};

const instance = axios.create(options);

// Set the AUTH token for any request
// ref: https://stackoverflow.com/questions/43051291/attach-authorization-header-for-all-axios-requests
instance.interceptors.request.use(function (config) {
const token = localStorage.getItem("USER_JWT_TOKEN");
config.headers.Authorization = token ? `Bearer ${token}` : '';

return config;
});

return instance;
};

export default createClient();

然后,当我使用此设置发出请求时,axios 会自动在我的所有请求中发送身份验证 header 。

import apiClient from "./apiClient";

const results = await apiClient.get(`/users`);

有我从 chrome 的网络面板复制的请求的 curl 预览。

curl 'https://myserver.com/users' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://myserver.com/' -H 'Origin: https://myserver.com' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...... long JWT token string here' -H 'X-Requested-With: XMLHttpRequest' --compressed

关于javascript - 如何在 hapi.js 的路径上使用 hapi-auth-jwt2 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55285865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com