2015-04-17 9 views
10

Ho un servizio e il mio obiettivo è consentire a un utente di autenticarci sul suo account Github tramite OAuth. Il livello API è stateless, quindi non voglio mantenere alcuna informazione sulla sessione. Il codice che ho finora è:Come posso configurare passport-github per riconoscere l'utente durante la richiamata?

app.use passport.initialize() 
    app.use passport.session() 

    passport.use new GitHubStrategy 
    clientID: global.config.oauth.github.clientID 
    clientSecret: global.config.oauth.github.clientSecret 
    callbackURL: "http://localhost:9500/auth/github/callback" 
    passReqToCallback: true 
    , (req, accessToken, refreshToken, profile, done) -> 
    console.log req.params 
    serviceQuery = 
     service: 'github' 
     provider_id: "#{profile.id}" 
     UserId: 13 

    global.db.Service.find 
     where: serviceQuery 
    .then (dbService) -> 
     if not dbService 
     newService = 
      service: 'github' 
      token: accessToken 
      secret: null 
      provider_id: profile.id 
      raw: profile._json 
      UserId: 13 
     global.db.Service.create newService 
     else 
     dbService.token = accessToken 
     dbService.raw = profile._json 
     dbService.save() 
    .then -> 
     done null, true 


    app.get '/auth/github/:sessionToken', (req, res, next) -> 
    console.log req.params 
    next() 
    , passport.authenticate 'github', 
    scope: 'repo' 
    session: false 

    app.get '/auth/github/callback', passport.authenticate('github', 
    scope: 'repo' 
    session: false 
), (req, res) -> 
    res.redirect 'http://localhost:8080/app' 

modo che quando l'utente viene indirizzato a /auth/github/:sessionToken, voglio passport a fare la sua magia e reindirizzare l'utente a GitHub. Funziona alla grande Ma quando ritornano a /auth/github/callback, devo ancora essere in grado di identificare quale utente sia.

Poiché questo è il servizio API, dovrebbe essere stateless, così come ho detto prima, sto cercando un modo per passare quel token allo /auth/github/callback. Come posso realizzare questo?

risposta

2

Provare un registro di console di req.user in/auth/github/callback. Credo che req.user conserverà ancora le informazioni dell'utente. Come appare in this tutorial, passa le informazioni dell'utente da visualizzare passando nel req.user.

+0

[Questa guida] (https://scotch.io/tutorials/easy-node-authentication-google) mostra effettivamente come visualizzare le informazioni dall'autenticazione google. Sembra che le informazioni di google siano visualizzate in una variabile user.google. Forse prova a console un log req.user.github per ottenere le loro informazioni github. – tilted

+0

Ma come può memorizzarlo se non si imposta una sessione? – Shamoon

+0

Hey @Shamoon, grazie mille. Sono contento che abbia finito per aiutare. – tilted

Problemi correlati