2015-06-17 10 views
5

Ich baue ein Projekt mit Deployd für Unterstützung mit meiner API und dpd-Pass für die Authentifizierung.Wie behandelt man Callback/Redirects von dpd-pass über Google-Strategie?

Ich scheinen alles authentifizieren zu haben, mit Sitzungsschlüssel hinter ausgegeben und Benutzerauthentifizierung durch Google, aber ich habe Probleme mit meinem redirectURL s, sowie das Übersetzen der Rückrufseite, mit der ich zurück bin. http://localhost:3000/auth/google/callback?code=4/l4o-H2F4QKJ5tdKbVbGfWygTGRvhHgr9zrHWImFFKdM#

mit einem

: gegeben

var sendResponse = function(ctx, err, config) { 
var sessionData = ctx.session.data; 
var returnUrl = (ctx.req.cookies && ctx.req.cookies.get('_passportReturnUrl')) || null; 

if(returnUrl) { 
    var redirectURL = url.parse(returnUrl, true); 

    // only append if not disabled 
    if(!config.disableReturnParams) { 
     // delete search so that query is used 
     delete redirectURL.search; 

     // make sure query is inited 
     redirectURL.query = redirectURL.query || {}; 
     if(err) { 
      redirectURL.query.success = false; 
      redirectURL.query.error = err; 
     } else { 
      // append user + session id to the redirect url 
      redirectURL.query.success = true; 

      if(!config.disableSessionId) { 
       redirectURL.query.sid = sessionData.id; 
       redirectURL.query.uid = sessionData.uid; 
      } 
     } 
    } 

    var redirectURLString = ''; 
    try { 
     redirectURLString = url.format(redirectURL); 
    } catch(ex) { 
     console.warn('An error happened while formatting the redirectURL', ex); 
    } 

    // redirect the user 
    ctx.res.setHeader("Location", redirectURLString); 
    ctx.res.statusCode = 302; 

    ctx.done(null, 'This page has moved to ' + redirectURLString); 
    } else { 
     if(err) { 
      ctx.res.statusCode = 401; 
      console.error(err); 
      return ctx.done('bad credentials'); 
     } else { 
      ctx.done(err, { path: sessionData.path, id: sessionData.id, uid: sessionData.uid }); 
     } 
    } 
}; 

Nach erfolgreicher Authentifizierung, ich bin ein returnUrl von:

ich in die dpd-passport/index.js Datei gegraben haben, und ich glaube, dass dies die relevanten Informationen Körper von:

{"path":"/users","id":"d03c0faccfe41134c193266afef979c5af33adf935aeff45844b0f9473dee4ab1fbd1114240e13ea9a542785da3845cfec984e3a5b8cb188d6c595b6fc39a726","uid":"747f97a9bcfa9811"}

was mir scheint, als ob meine Ergebnisse die letzte else-Anweisung im obersten Codeblock treffen.

Wenn das stimmt, dann ist meine returnUrlNULL.

den returnUrl Code in der dpd-Pass-Datei Tracing zurück, es sieht aus wie es dies von Cookies in der Folge Schnipsel greifen soll:

dazu
if(ctx.query.redirectURL && this.config.allowedRedirectURLs) { 
    try { 
     this.regEx = this.regEx || new RegExp(this.config.allowedRedirectURLs, 'i'); 

     if(ctx.query.redirectURL.match(this.regEx)) { 
      // save this info into the users session, so that we can access it later (even if the user was redirected to facebook) 
      if (ctx.res.cookies) ctx.res.cookies.set('_passportReturnUrl', ctx.query.redirectURL); 
     } else { 
      debug(ctx.query.redirectURL, 'did not match', this.config.allowedRedirectURLs); 
     } 
    } catch(ex) { 
     debug('Error parsing RedirectURL Regex!', ex); 
    } 
} 

hinzuzufügen, ich meine allowedRedirectUrls in den config wie:

^http://localhost:3000/.*$ 

bin ich ratlos und hoffe, es ist etwas offensichtlich, dass ich fehle.

Ich habe die Passwege und Authentifizierungsstrategien ähnlich der folgenden gesehen, aber waren nicht erfolgreich bei der Umsetzung dieses in dpd-Pass: zu all

app.get('/auth/google/callback', 
    passport.authenticate('google', { failureRedirect: '/login' }), 
    function(req, res) { 
    // Successful authentication, redirect home. 
    res.redirect('/'); 
    }); 

hinzuzufügen, ich ui-Router verwende/AngularJS.

Antwort

2

Sie haben die redirectURL zu dpd-Pass durch die Verbindung zu liefern, die die oauth Prozedur beginnt:

http://localhost:2403/auth/google?redirectURL=http://localhost