여권

2017-09-21 1 views
0

와 deserializeUser 전화를 어떻게 deserializeUser가 작동하도록되어 방법에 대한 다음과 같은 게시물을 발견 : 나는 시도하지만 PassportJS serializeUser and deserializeUser execution flow여권

및 사용자에 대한 키를 포함하는 서버에 JSON을 보내기를, 나는 REQ 호출 할 수 없습니다 .user를 사용하여 사용자의 세부 정보를 찾습니다.

많은 것들이 두포에서 일어나기 때문에 무슨 일이 일어나는지 확인하는 방법에 대해 확신이 서지 않습니다.

키가 포함되어 있다고 표현하기 위해 패스포트에 쿠키를 보내겠습니까? 쿠키 또는 형식의 특정 이름은 무엇입니까? 키를 JSON 형식으로 보내야합니까?

const express = require('express') 
const app = express() 
const mongoose = require('mongoose') 
var cors = require('cors') 
const bodyParser = require('body-parser') 
var http = require('http') 
var cookieParser = require('cookie-parser'); 
app.use(cookieParser('someSecret')); 
var session = require('express-session'); 
app.use(session()); 
var flash=require("connect-flash"); 
app.use(flash()); 

passport.use(new LocalStrategy({ 
    usernameField: 'username', 
    passwordField: 'password', 
    session: true, 
    passReqToCallback: true 
}, 
function(req, username, password, done){ 
    registrationModel.findOne({username: username}, function(err, user){ 
    if (err) { return done(err); } 
    if (!user){ 
     console.log("Username incorrect") 
     return done(null, false, { message: 'Incorrect username.'}); 
    } 
    if (user.password != password){ 
     console.log("Password Incorrect") 
     return done(null, false, { message: 'Incorrect Password.'}); 
    } else { 
     console.log("Returning good stuff") 
     console.log(user) 
     return done(null, user); 
    } 
    }); 
    } 
)); 

//Needed for authenticating the session and initializing passport 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.serializeUser(function(user, done) { 
    console.log("Serializing User") 
    console.log(user.id) 
    console.log("Should be serialized") 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done){ 
    users.User.findById(id, function(err, User) { 
    console.log('attempting to deserialize user') 
    console.log(user) 
    console.log('--------------') 
    if (User){ 
     done(err, User); 
    } else { 
     done(err, null); 
    } 
}) 
}) 

app.post('/api/authenticate', passport.authenticate('local'), 
function(req, res){ 
    const individualIWant = jsonQuery('req.sessionStore.sessions') 
    res.cookie('FreeUp', req.session.passport.user) 
    var cookie = JSON.stringify(req.session.passport.user) 
    res.send({'name': 'FreeUp', 'value': cookie}) 
}) 

내가 브라우저에서 쿠키를 볼 수 있습니다 이름 : "FreeUp" 값 : ""59c4cf4ecb364a000f23a707 ""

값은 데이터베이스 오브젝트 ID가 아니라 일련의 키입니다 목적. res.req.sessionID를 사용하여 직렬화 된 객체의 키에 액세스하고 그 객체를 대신 보내야한다는 것을 이해합니다.

그러나 여전히 요점은 json 파일이나 쿠키로 되돌릴 지 모르겠다. 그것은 복잡한 라이브러리를 사용하는 것처럼 보입니다.

Ember에서 데이터를 다시 보낼 때 Passport에서 사용할 것으로 예상되는 형식은 무엇입니까?

감사합니다.

+0

애플리케이션을 어떻게 구성했는지 보여줄 수 있습니까? 귀하의 질문에 대한 답변은 그것에 크게 의존합니다. – Paul

답변

0

나는 이것 또한 많은 문제가 있었다.

나는 Passport가 실제로 세션 자체를 생성하지 않는다는 것을 이해합니다. Express 세션과 같은 다른 미들웨어를 사용해야하므로 쿠키 파서가 필요합니다.

나는 Scotch : https://scotch.io/tutorials/easy-node-authentication-setup-and-local에있는 자습서를 사용하여 인증을 만들었습니다. 정말 잘 설명되어 있으며 (특히 로컬 인증을 위해) 내가 찾을 수있는 유일한 직접적인 튜토리얼입니다. 나는 그것이 나를 위해 일했다는 것을 확인할 수 있고 req.user는 내 경로에 패스 할 때 모든 자격 증명을 저장하고있다.

희망이 있습니다.