2016-06-12 10 views
0

나는 cloud9 환경에서 애플리케이션을 개발 중입니다. 사용 :Auth0 및 node.js를 사용하여 내 앱에 인증을 통합합니다.

  • 노드 4.43
  • 내가 내 데모 Auth0 내에서-DEV 응용 프로그램에 계정 통합 한 4.13.4

을 표현한다. 로그인 할 수 있습니다 (내 앱의 첫 번째 페이지로 리디렉션 됨). req.isAuthenticated()를 인쇄 할 때 false가 표시됩니다. 또한 req.user는 정의되지 않습니다.

나는 node.js에 대해 auth0의 quick start을 추적했습니다.

app.js :

내가 주로 invovled하는 세 개의 파일을 첨부하고있어

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 ....'); 
}); 

설정 - 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를 (실제 fisrt 로그인 성공 후 리디렉션하려는 페이지 :

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에서 가이드는 변수 전략을 초기화하지만 실제로는 사용하지 않는 것으로 나타났습니다.

BUMP

답변

1

당신은 /callback 엔드 포인트에서 passport.authenticate()를 호출하지 않습니다. 비교를 위해 참조하십시오 : 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"); 
    });