簡體   English   中英

將auth0集成到Web應用程序Express / Node js中

[英]integrate auth0 in a web app express / node js

我正在嘗試將auth0添加到我的Web應用程序中,我已經按照他們在網絡上的教程和其他教程進行操作,包括創建帳戶/客戶和其他所有內容,但是我一直得到正常的白頁加載屏幕,幾分鍾后,我收到了這個錯誤:

ERR_EMPTY_RESPONSE

這些是我的代碼的一部分:

app.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;

index.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和/ logout字段,還是應該直接由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.

在對用戶進行身份驗證並將相同的URL存儲在Web存儲中之后,您可以將用戶重定向到非回調URL。 在app.get(/ login)...>經過身份驗證的>>着陸頁>>上存儲訪問令牌,因此在驗證后,它應該登錄到您的着陸頁(主頁)。

在app.get(/ logout)上,您可以清除訪問令牌或使其在期望的時間可用,並使其在特定時間后過期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM