0

私はcloud9環境でアプリケーションを開発しています。使用:

  • ノード 4.43
  • エクスプレス 4.13.4

Demo Auth0 アカウントを開発中のアプリケーションに統合しました。ログインできます (アプリの最初のページにリダイレクトされます) が、req.isAuthenticated() を印刷すると false になります。req.user も未定義です。

node.jsのauth0のクイックスタートに従いました。

主に関与する 3 つのファイルを添付します。

app.js:

var express = require('express'),
    app = express(),
    BodyParser = require("body-parser"),
    mongoose = require("mongoose"),
    student = require ("./models/student"),
    students_class = require("./models/class"),
    // =============
    //     auth0
    // =============
    passport = require('passport'),
    strategy = require('./models/setup-passport'),
    cookieParser = require('cookie-parser'),
    session = require('express-session');
    app.use(cookieParser());
    app.use(session({ secret: 'FpvAOOuCcSBLL3AlGxwpNh5x-U46YCRoyBKWJhTPnee2UELMd_gjdbKcbhpIHZoA', resave: false,  saveUninitialized: false }));
    app.use(passport.initialize());
    app.use(passport.session());

    app.get('/login',passport.authenticate('auth0', { failureRedirect: '/url-if-something-fails' }),
  function(req, res) {

    res.send(req.user);
    if (!req.user) {
      throw new Error('user null');
    }
    res.redirect("/", {username: req.user});
  });





mongoose.connect("mongodb://localhost/myapp");

// ============================
//         routes
// ============================

var classRoutes = require("./routes/class"),
    indexRoutes = require("./routes/index"),
    studentRoutes = require("./routes/student"),
    assocRroutes = require ("./routes/assoc");

// ============================================
//         configuring the app
// ============================================
app.set("view engine", "ejs");
app.use(express.static ("public"));
app.use(BodyParser.urlencoded({extended: true}));
app.use(classRoutes);
app.use (indexRoutes);
app.use(studentRoutes);
app.use(assocRroutes);





app.listen(process.env.PORT, process.env.IP, function() {
    console.log('Attendance Server is Running ....');
});

setup-passport.js

var passport = require('passport');
var Auth0Strategy = require('passport-auth0');

var strategy = new Auth0Strategy({
    domain:       'me.auth0.com',
    clientID:     'my-client-id',
    clientSecret: 'FpvAOOuCcSBLL3AlGxwpNh5x-U46YCRoyBKWJhTPnee2UELMd_gjdbKcbhpIHZoA',
    callbackURL:  '/callback'
  }, function(accessToken, refreshToken, extraParams, profile, done) {
    // accessToken is the token to call Auth0 API (not needed in the most cases)
    // extraParams.id_token has the JSON Web Token
    // profile has all the information from the user
    return done(null, profile);
  });

passport.use(strategy);

// This is not a best practice, but we want to keep things simple for now
passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  done(null, user);
});

module.exports = strategy;

index.js (ログイン成功後にリダイレクトする実際の最初のページ:

var express = require("express");
var passport = require('passport');
var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn();
var router = express.Router();
var student = require ("../models/student");

//INDEX 

router.get("/callback", function(req, res) {
    student.find({}, function(err, student) {
        console.log(req.isAuthenticated())
        if (err) {
            console.log(err);
        } else {
            res.render("home/index.ejs", {
                students: student
            });
        }

    });
});


module.exports = router;

何がうまくいかないのでしょうか?また、app.jsでは、ガイドが変数戦略を初期化していますが、実際にはそれを使用していないようです。

バンプ

4

1 に答える 1

1

エンドポイントpassport.authenticate()で呼び出していません。/callback比較のために参照してください: https://auth0.com/docs/quickstart/webapp/nodejs#5-add-auth0-callback-handler

// Auth0 callback handler
app.get('/callback',
  passport.authenticate('auth0', { failureRedirect: '/url-if-something-fails' }),
  function(req, res) {
    if (!req.user) {
      throw new Error('user null');
    }
    res.redirect("/user");
  });
于 2016-06-30T23:32:48.450 に答える