- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我想向 hapi 服务器添加插件,该服务器具有多个连接,例如监听不同的 ip。 是否可以向所有配置的服务器添加插件? 或者如何循环所有服务器以将插件添加到所有服务器? 最佳答案 默认情况下,插件会在调
如何验证可选参数使用 hapi 和 joi path: '/users/{limit?}', limit 是可选的,但如果存在则应为整数。 最佳答案 您可以使用 Joi.number().intege
我想允许我的前端将值的哈希值推送到后端。哈希可以具有任何(JSON 合法)键,但每个键的值必须符合特定模式。可以这样想: extended: { tubers: { potato: {we
如何使用 Hapi 18.1 设置响应延迟,如果 API 响应缓慢,我想看到沙漏旋转。在早期版本中,我使用了如下所示的 setTimeout()。 server.route({ method:
我使用的是hapi,而不是express。 super 测试还应该有效吗? 如果是这样,有没有一种快速的方法来更改我的代码以使其运行? 我的测试看起来像这样,基于 documentation : im
根据文档https://hapijs.com/api/16.0.1#route-configuration路由方法可能不是“HEAD”类型,但我不明白为什么我不能覆盖该行为。 最佳答案 HEAD 路由
基本上,我的应用有一个登录/注册登录页面。用户登录或注册后,我不希望他们能够再访问此路由。我不确定如何使用 Hapi.js 实现这一目标。登录页面不使用任何身份验证策略,因此它不知道用户是否登录。 最
我查看了为 FHIR 创建配置文件的文档,并且使用 Forge 创建了一些我认为可以有效描述配置文件的 xml。我在文档中找不到它实际说明我需要向 RESTful api 发出什么请求才能实际添加新配
我在 hapi.js 中使用访问 token 时遇到问题。我无法理解如何使用该 token 进行身份验证。我正在关注这篇文章 dwyl/hapi-auth-jwt2 .我正在使用 mongodb 作为
我刚刚开始学习hapi.js 。我正在尝试理解身份验证的代码。这是如何运作的。为此,我关注了hapi-auth-jwt2 。 之后,当我从 postman 调用 API 时,我没有得到任何输出。 这是
正在使用 @hapi/hapi : ^20.0.0 Node .js:v10.19.0 得到以下错误堆栈 | #meetings = null; | ^ | | SyntaxError
我一年前使用以下版本的 hapi 和 hapi-swagger 创建了一个 REST API。 hapi: "8.5.1", hapi-swagger: "0.7.3" 为了注册 hapi-swagg
我们目前使用 HAPI 和 HAPI-AUTH-BASIC 进行身份验证。 配置路由时,是否可以检查用户是否已通过身份验证,如果未通过身份验证,则将其重定向到自定义登录页面? 每当我们将身份验证设置为
我需要在 server.onPreHandler ext 方法中设置一些响应 header 。有两种情况,当用户向我的路线终点发送 API 请求时,我需要发生这种情况。1)在成功的场景中,我需要设置标
我正在构建一个简单的日志应用程序,并尝试实现模块化以使代码更具可读性。然而,当我启动我的应用程序时遇到了一些麻烦。我有两个文件:index.js,其中有我的服务器配置;routes.js,其中有我的路
可以将代理对象添加到 Hapi 上的预处理程序中,例如 pre:[{ assign: 'callProxy' method: { proxy:{}
尝试验证数组在一种情况下是否有零个或多个字符串,以及在另一种情况下是否有零个或多个对象,与 Joi 文档作斗争:( validate: { headers: Joi.object({
我正在尝试将 hapi.js 与 mysql 连接起来。但是在定义一个 server.route 的时候。 处理程序 没有返回值。 server.route({ method:'GET
我希望在数据库响应之前向我的用户显示加载图标,然后将其重定向到正确的页面。 我的代码是这样的: // handler function handler(request, reply) { repl
在 hapi.js 中,我可以使用将请求从一条路由重定向到另一条路由 response.redirect('/home') 如何通过重定向发送一些数据?我尝试在标题中设置它 response.redi
我是一名优秀的程序员,十分优秀!