我是角色和哈皮的新人。 我想用一个简单的登录页面创建一个服务器和一个应用程序。 用户可以登录,然后他可以访问其他一些页面。
到目前为止,我有一台使用hapi-auth-basic方案身份验证的Hapi服务器
'use strict';
const Hapi = require('Hapi');
const users = {
john: {
username: 'john',
password: '$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm' // 'secret'
}
};
const validate = async (request, username, password, h) => {
const user = users[username];
if (!user) {
return { credentials: null, isValid: false };
}
const isValid = await Bcrypt.compare(password, user.password);
const credentials = { id: user.id, name: user.name };
return { isValid, credentials };
};
const main = async () => {
const server = new Hapi.Server({
port: 3000,
host: 'localhost',
routes: { cors: true },
debug: { request: ['*'] }
});
await server.register([
require('hapi-auth-basic')
]);
server.auth.strategy('simple', 'basic', { validate });
server.auth.default('simple');
server.route({
method: 'GET',
path: '/authenticate',
handler: function (request, h) {
return 'welcome';
}
});
await server.start();
return server;
};
main()
.then((server) => console.log(`Server listening on ${server.info.uri}`))
.catch((err) => {
console.error(err);
process.exit(1);
});
在Angular中我有我的登录页面,我喜欢向api服务器发送身份验证请求。
以下是auth-service.ts中调用服务器的函数
getRequestWithBasicAuth(user: User): Observable<any> {
let data = btoa(user.name.toLowerCase() + ':' + user.password);
let headers = new HttpHeaders();
headers.append("Content-Type", "application/json");
headers.append("Authorization", "Basic " + data);
return this.http.get(this.authenticateUrl, {headers: headers})
.map((res: Response) => {
let jsonObj: any;
if (res.status === 204) {
jsonObj = null;
}
else if (res.status === 500) {
jsonObj = null;
}
else if (res.status === 200) {
jsonObj = res.json()
}
return [{ status: res.status, json: jsonObj }]
})
.catch(error => {
return Observable.throw(error);
});
}
Hapi控制台记录这个:
Debug: auth, unauthenticated, missing, simple core.js:122
Error: Unauthorized
我找不到任何带有完整后端和前端代码的教程。 我尝试了几件事,我开始觉得基本的身份验证并不是我想要做的事情。但是,如果我在标题中正确发送凭据,它应该可以正常工作,对吗?
如何正确发送凭据? 我明白,使用基本身份验证,用户无法注销。我应该使用什么样的身份验证方案? 您对教程或文档有什么建议可以帮助我理解这一切吗?