Authentication webpack dev服务器未使用hapi和hapi auth cookie正确代理重定向到后端
当我启动hapi服务器和webpack dev服务器并转到localhost:3000/api/login时,会显示一个502坏网关,页面上没有任何内容!谢谢每一位帮助我的人 这是我的网页文件:Authentication webpack dev服务器未使用hapi和hapi auth cookie正确代理重定向到后端,authentication,cookies,proxy,webpack,hapijs,Authentication,Cookies,Proxy,Webpack,Hapijs,当我启动hapi服务器和webpack dev服务器并转到localhost:3000/api/login时,会显示一个502坏网关,页面上没有任何内容!谢谢每一位帮助我的人 这是我的网页文件: module.exports = { entry: ["./index.js"], output: { filename: "bundle.js" }, module: { loaders: [ {
module.exports = {
entry: ["./index.js"],
output: {
filename: "bundle.js"
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['react', 'es2015']
}
}
]
},
resolve: {
extensions: ['', '.js', '.jsx']
},
devServer: {
historyApiFallback: {
index: 'index.html'
},
stats: 'normal',
host: process.env.HOST || 'localhost',
port: process.env.PORT || 3000,
proxy: {
'/api/*': {
target: 'http//localhost:9000',
secure: false
}
}
}
};
这是我的hapi服务器:
const Hapi = require('hapi');
const Inert = require('inert');
const config = require('./config');
const CookieAuth = require('hapi-auth-cookie');
const server = new Hapi.Server();
server.connection({port: 9000});
const options = {
ops: {
interval: config.hapiGoodInterval
},
reporters: {
console: [{
module: 'good-squeeze',
name: 'Squeeze',
args: [{ log: '*', response: '*' }]
}, {
module: 'good-console'
}, 'stdout'],
file: [{
module: 'good-squeeze',
name: 'Squeeze',
args: [{ ops: '*' }]
}, {
module: 'good-squeeze',
name: 'SafeJson'
}, {
module: 'good-file',
args: ['./logs/fixtures/file_log']
}]
}
};
server.register(CookieAuth, (err) => {
if (err) {
throw err;
}
});
server.register(Inert, ()=>{});
server.register({
register: require('good'),
options,
}, (err) => {
if (err) {
return console.error(err);
}
server.start(() => {
console.info(`Server started at ${ server.info.uri }`);
});
});
const cache = server.cache({ segment: 'sessions', expiresIn: 3 * 24 * 60 * 60 * 1000 });
server.app.cache = cache;
server.auth.strategy('session', 'cookie', true, {
password: 'Vaj57zED9nsYeMJGP2hnfaxU874t6DV5',
cookie: 'sid-example',
redirectTo: '/api/login',
isSecure: false,
validateFunc: function (request, session, callback) {
cache.get(session.sid, (err, cached) => {
if (err) {
return callback(err, false);
}
if (!cached) {
return callback(null, false);
}
return callback(null, true, cached.account);
});
}
});
server.route(require('./routes'));
以下是路线:
var Handlers = require('./handlers');
var Joi = require('joi');
var Routes = [
{
path: '/api/hello',
method: 'GET',
config: {
auth:false,
handler: function (request, reply) {
reply('Hello from the server')
}
}
},
{
method: ['GET', 'POST'],
path: '/api/login',
config: {
handler: Handlers.login,
auth: { mode: 'try' },
plugins: {
'hapi-auth-cookie': { redirectTo: false }
}
}
},
{
path: '/api/logout',
method: 'GET',
handler: Handlers.logout
}
];
最后是处理程序:
const r = require('rethinkdb');
var {Post, User, Opinion} = require('./rethinkdb/models/all');
class Handlers {
static login(request, reply) {
let username = 'pesho';
let password = '12345';
let uuid = 1;
if (request.auth.isAuthenticated) {
return reply.redirect('/');
}
let message = '';
let account = null;
if (request.method === 'post') {
if (!request.payload.username ||
!request.payload.password) {
message = 'Missing username or password';
}
else {
if (password !== request.payload.password || username !== request.payload.username) {
message = 'Invalid username or password';
}
}
}
if (request.method === 'get' || message) {
return reply('<html><head><title>Login page</title></head><body>' +
(message ? '<h3>' + message + '</h3><br/>' : '') +
'<form method="post" action="/api/login">' +
'Username: <input type="text" name="username"><br>' +
'Password: <input type="password" name="password"><br/>' +
'<input type="submit" value="Login"></form></body></html>');
}
const sid = String(++uuid);
request.server.app.cache.set(sid, { account: account }, 0, (err) => {
if (err) {
reply(err);
}
request.cookieAuth.set({ sid: sid });
return reply.redirect('/');
});
}
static logout(request, reply) {
request.cookieAuth.clear();
return reply.redirect('/');
};
}
module.exports = Handlers;
const r=require('db');
var{Post,User,Opinion}=require('./db/models/all');
类处理程序{
静态登录(请求、回复){
让username='pesho';
让密码='12345';
设uuid=1;
if(request.auth.isAuthenticated){
返回reply.redirect('/');
}
让消息=“”;
let account=null;
if(request.method==='post'){
如果(!request.payload.username)||
!request.payload.password){
消息='缺少用户名或密码';
}
否则{
if(密码!==request.payload.password | | username!==request.payload.username){
消息='无效的用户名或密码';
}
}
}
if(request.method=='get'| |消息){
返回回复('登录页面'+
(消息?''+消息+'
':'')+
'' +
'用户名:
'+
'密码:
'+
'');
}
常量sid=字符串(++uuid);
request.server.app.cache.set(sid,{account:account},0,(err)=>{
如果(错误){
答复(错误);
}
request.cookieAuth.set({sid:sid});
返回reply.redirect('/');
});
}
静态注销(请求、答复){
request.cookieAuth.clear();
返回reply.redirect('/');
};
}
module.exports=处理程序;
问题是a类转储,但问题是:
必须在代理目标的末尾添加“/”
proxy: {
'/api/*': {
target: 'http://localhost:9000/',<= This here
secure: false
}
},
代理:{
“/api/*”:{
目标:'http://localhost:9000/',