2013-01-09 4 views
1

내 노드 응용 프로그램에 passportJS를 구현했습니다. 로그인 한 후 세션에 배치 한 객체를 얻습니다.PassportJS - 세션 객체를 얻는 방법

{ loginStatus: 'SUCCESS', 
    orgRoles: { '7': 'ALL' }, 
    orgNames: { '7': '[email protected]' }, 
    loginId: 4, 
    message: 'Success', 
    success: true } 

이 (커피 스크립트에서) 여권의 구성입니다 :

passport.serializeUser (user, done) -> 
    console.log 'serializing', user 
    done null, user 

passport.deserializeUser (user, done) -> 
    console.log 'deserializing', user 
    done null, user 

#passport LocalStrategy 
passport.use new LocalStrategy 
    usernameField: 'email' 
    passwordField: 'password' 
    , 
    (username, password, done) -> 
     validateUser username, password, done 



validateUser = (username, password, done) -> 

    console.log 'loginName is --> ' + username + ' password --> ' + password 
    options = 
     protocol: API_PROTOCOL 
     host: API_HOST 
     pathname: '/appservices/login' 

    reqURL = url.format options 
    requestOptions = 
     headers: 
      'Content-type': 'application/json; charset=utf-8' 
     body: JSON.stringify 
      loginName: username 
      password: password 
     method: 'POST' 

    request reqURL, requestOptions, (error, response, body) -> 
     console.log 'body is --> ' + body 
     resObj = JSON.parse body.toString() 

     console.log 'loginStatus is --> ' + resObj.loginStatus 

     if resObj.loginStatus is 'FAIL' or resObj.loginStatus is 'INVALID_PASSWORD' or resObj.loginStatus is 'LOGIN_NOT_FOUND' 
      return done null, false, 
       message: 'We couldn\'t find that email/password, please try again.' 
     if resObj.loginStatus is 'ACCOUNT_LOCKED' 
      return done null, false, 
       message: 'The user has been locked out due to too many unsuccessful login attempts or the admin has locked the account. Please contact admin or customer support.' 
     if resObj.loginStatus is 'NO_LOGIN_DOMAIN_AVAILABLE' 
      return done null, false, 
       message: 'The login attempt is valid but there is no registered domain that the login can access. Please contact admin or customer support.' 
     if resObj.loginStatus isnt 'SUCCESS' 
      return done null, false, 
       message: 'The login attempt has failed. If you feel this is an error please try again or contact admin/customer support.' 

     done null, resObj 

app.configure -> 
    #app.use express.logger() 
    app.use express.static(__dirname + '/public') 
    app.use express.cookieParser() 
    app.use express.bodyParser() 
    app.use express.methodOverride() 
    app.use express.session 
     secret: '###########' 
     store: new RedisStore() 
     cookie: 
      maxAge: 3600000 
    app.use flash() 
    app.use passport.initialize() 
    app.use passport.session() 
    app.set 'view engine', 'jade' 
    app.set 'views', __dirname + '/views' 
    app.use app.router 

내가 볼 출력 : 내가 좋아하는 것

serializing { loginStatus: 'SUCCESS', 
    orgRoles: { '7': 'ALL' }, 
    orgNames: { '7': '[email protected]' }, 
    loginId: 4, 
    message: 'Success', 
    success: true } 
deserializing { loginStatus: 'SUCCESS', 
    orgRoles: { '7': 'ALL' }, 
    orgNames: { '7': '[email protected]' }, 
    loginId: 4, 
    message: 'Success', 
    success: true } 

가 액세스 할 수 있도록이 대상이다 나는 세션에 배치하고 그것에서 가치를 얻는다. 내가 GET 요청을 할 때 예를 들어, 나는 다음을 수행 할 수 있도록하고 싶습니다 :

app.get '/threatStatus', (res, req) -> 
    #I would like to retrieve the loginId for the user that I placed in the session 

어떤 도움이 크게 감사합니다!

건배,

Kianosh

업데이트 : 나는 다음 호출하여 필요한 데이터를 얻을 수있었습니다 :

app.get '/threatStatus', (res, req) -> 
    console.log req.req.user 

다음과 같은 출력 :

{ loginStatus: 'SUCCESS', 
    orgRoles: { '7': 'ALL' }, 
    orgNames: { '7': '[email protected]' }, 
    loginId: 4, 
    message: 'Success', 
    success: true } 

질문을 구걸하는 것은 맞습니까? 이 데이터를 얻으려면 요청 객체를 자세히 살펴 봐야합니까? 'req.req.user'가 맞습니까?

답변

4

사용자 개체는 req.user을 통해 검색해야합니다.

정의되지 않은 req.user를 처리하지 않으려면 사용자가 req.isAuthenticated()을 통해 로그인했는지 확인할 수 있습니다.

관련 문제