5

ノードアプリケーションにpassportJSを実装しました。ログイン後、セッションに配置したオブジェクトを取得します。これがオブジェクトです:

{ loginStatus: 'SUCCESS',
  orgRoles: { '7': 'ALL' },
  orgNames: { '7': 'kianoshp@gmail.com' },
  loginId: 4,
  message: 'Success',
  success: true }

これはパスポート構成です(coffeescriptで):

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': 'kianoshp@gmail.com' },
  loginId: 4,
  message: 'Success',
  success: true }
deserializing { loginStatus: 'SUCCESS',
  orgRoles: { '7': 'ALL' },
  orgNames: { '7': 'kianoshp@gmail.com' },
  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

どんな助けでも大歓迎です!!

乾杯、

キアーノッシュ

更新: 次の呼び出しを行うことで、必要なデータを取得できました。

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

これは以下を出力します:

{ loginStatus: 'SUCCESS',
  orgRoles: { '7': 'ALL' },
  orgNames: { '7': 'kianoshp@gmail.com' },
  loginId: 4,
  message: 'Success',
  success: true }

どちらが論点先取ですか、これは正しいですか?このデータを取得するには、リクエストオブジェクトを深く掘り下げる必要がありますか?'req.req.user'は正しいですか?

4

1 に答える 1

4

ユーザー オブジェクトは、 経由で取得する必要がありますreq.user

req.isAuthenticated()未定義の req.user の処理を​​避けるために、ユーザーが経由でログインしているかどうかを確認できます。

于 2013-01-11T22:37:01.473 に答える