如何通过谷歌策略处理来自dpd护照的回调/重定向
How to handle Callback/Redirects from dpd-passport via Google strategy?
我正在使用 Deployd 构建一个项目,以协助我的 API,并使用 dpd-passport 进行身份验证。
我似乎已经完成了所有身份验证,后面分发了会话密钥,并通过Google进行了用户身份验证,但是我的redirectURL
以及翻译返回的回调页面都遇到了问题。
我已经深入研究了dpd-passport/index.js
文件,我相信这是相关信息:
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 });
}
}
};
成功进行身份验证后,我returnUrl
:
http://localhost:3000/auth/google/callback?code=4/l4o-H2F4QKJ5tdKbVbGfWygTGRvhHgr9zrHWImFFKdM#
主体为:
{"path":"/users","id":"d03c0faccfe41134c193266afef979c5af33adf935aeff45844b0f9473dee4ab1fbd1114240e13ea9a542785da3845cfec984e3a5b8cb188d6c595b6fc39a726","uid":"747f97a9bcfa9811"}
在我看来,我的结果正在达到最顶层代码块中的最终 else
语句。
如果这是真的,那么我的returnUrl
是NULL
.
追溯 dpd-passport 文件中的returnUrl
代码,看起来它应该从以下代码片段中的 cookie 中获取此代码:
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);
}
}
除此之外,我在配置中的allowedRedirectUrls
为:
^http://localhost:3000/.*$
我很茫然,希望我缺少一些明显的东西。
我看到了类似于以下内容的护照路线和身份验证策略,但未能成功将其实施到 dpd-passport 中:
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
除此之外,我使用的是ui-router/AngularJS。
您必须通过启动 oauth 过程的链接提供指向 dpd-passport 的重定向网址:
http://localhost:2403/auth/google?redirectURL=http://localhost
- http/rxjs catch回调中的Angular 2重定向导致TypeError:无法读取属性'订阅'
- Iframe提交并将用户重定向回原始页面,但Iframe似乎仍然存在
- Node.js express应用程序无法从dropzone.js回调进行重定向
- JavaScript 重定向回引用页面
- 访问另一个网站后重定向回自己的网页
- 护照身份验证回调而不是重定向
- 重定向回 2 个页面并重新加载该页面
- 如何将节点.js回调定向到非匿名函数
- jQuery表单插件:如何正确处理从服务器发回的重定向请求
- 检查弹出窗口是否已重定向回 JavaScript 中的打开程序的域/端口/协议
- PassportJS - 动态设置状态以允许在回调时重定向
- 当响应 JSON 对象数据计数为零时,AJAX 成功回调函数重定向到错误回调
- Response.重定向不能在会话超时的页面回调中调用
- 我可以在chrome扩展中为oauth2回调设置什么重定向URL
- 如何在 expressjs 中重定向后进行回调
- OAuth.使用OAuth获取tweet时出现未定义错误.重定向方法的回调
- 无法在Ajax包装上的自定义成功回调内部重定向
- 如何通过谷歌策略处理来自dpd护照的回调/重定向
- 在Angular中,如何使用$location重定向.路径为$http.Post success回调
- 关闭Twitter Oauth登录弹出窗口,用回调重定向到parent