将 auth0 集成到 Web 应用程序 Express / Node JS 中



我正在尝试将 auth0 添加到我的 Web 应用程序中,我已经遵循了他们的教程和网络上的其他教程,包括创建帐户/客户端和其他所有内容,但我不断收到通常的白页加载屏幕,几分钟后我收到此错误:

ERR_EMPTY_RESPONSE

这些是我代码的一部分:

应用.js

...
var cookieParser = require('cookie-parser');
var session = require('express-session');
var passport = require('passport');
var Auth0Strategy = require('passport-auth0');
...
// Configure Passport to use Auth0
var strategy = new Auth0Strategy(
{
domain: process.env.AUTH0_DOMAIN,
clientID: process.env.AUTH0_CLIENT_ID,
clientSecret: process.env.AUTH0_CLIENT_SECRET,
callbackURL: process.env.AUTH0_CALLBACK_URL
},
(accessToken, refreshToken, extraParams, profile, done) => {
return done(null, profile);
}
);
passport.use(strategy);
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
...
app.use(cookieParser());
app.use(
session(
{
secret: uuid(),
resave: false,
saveUninitialized: false
}
)
);
app.use(passport.initialize());
app.use(passport.session());
...
app.get('/', routes.index);
app.get('/home', routes.home);
...
http.createServer(app).listen(app.get('port'), function(){
console.log('Server listening on port: ' + app.get('port'));
});
module.exports = app;

索引.js

exports.home = function(req, res){
res.render('home', { title: ' homepage ' });
};
exports.index = function(req, res){
var express = require('express');
var passport = require('passport');
var router = express.Router();
var env = {
AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID,
AUTH0_DOMAIN: process.env.AUTH0_DOMAIN,
AUTH0_CALLBACK_URL: process.env.AUTH0_CALLBACK_URL 
};
// GET home page. 
router.get('/', function(req, res, next) {
res.render('home', { title: ' homepage ' });
});
// Perform the login
router.get(
'/login',
passport.authenticate('auth0', {
clientID: env.AUTH0_CLIENT_ID,
domain: env.AUTH0_DOMAIN,
redirectUri: env.AUTH0_CALLBACK_URL,
audience: 'https://' + env.AUTH0_DOMAIN + '/userinfo',
responseType: 'code',
scope: 'openid'
}),
function(req, res) {
res.redirect('/');
}
);
// Perform session logout and redirect to homepage
router.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
// Perform the final stage of authentication and redirect to '/home'
router.get(
'/callback',
passport.authenticate('auth0', {
failureRedirect: '/'
}),
function(req, res) {
res.redirect(req.session.returnTo || '/home');
}
);
}

有些部分我不清楚,或者我想确认一下: 1)回调URL必须是我的首页(180.180.180.180/home)还是真正的首页(180.180.180.180)?哪一个应该包含在 auth0 仪表板中?

2) 在路由器中,我是否也应该指定/login 和/注销字段,还是应该由 auth0 API 直接管理这些字段?

很抱歉我的无知,但几天我遇到了这个问题,我不明白这是 auth0 帐户的授权错误还是其他错误。 我在 .env 文件中拥有凭据,但它们应该不是问题,因为我可以访问其中的其他数据以连接到我的 MySQL 数据库。

根据 auth0 的文档The callback URL is not necessarily the same URL to which you want users redirected after authentication.

redirect_uri field is used as a callback URL. Auth0 invokes callback URLs after the authentication process and are where your application gets routed.

在对用户进行身份验证并在 Web 存储中存储相同的 URL 后,可以将用户重定向到非回调 URL。 在 app.get(/login)...>身份验证>>登录页面上>>存储访问令牌 因此,身份验证后,它应该登录到您的登录页面(主页)。

在 app.get(/logout) 上,您可以清除访问令牌或使其在所需时间内可用,并让它在一定时间后过期。