我有一个 MEAN 堆栈应用程序,它使用 satellizer 进行 FB 登录。
$authProvider.facebook({
clientId: '1625070294abcdef',
scope: 'user_friends'
});
此处没有其他自定义设置。 一旦 FB 身份验证对话框关闭,FB 的响应(即用户数据)就会发送到我的 Express 服务器,以便我可以检索长期 token 。
我的 FB 开发者门户网站 URL 的设置是:
http://localhost:3000
这也是我的 Express 服务器正在监听的地址。
到目前为止一切顺利...一切正常...
现在我也在创建一个 ionic 应用程序..它将使用相同的 Express 后端。
为了执行 FB 登录,我再次使用 sateziller 和 ionic。
satellizer 在 ionic 应用程序中的配置如下:
var commonConfig = {
popupOptions: {
location: 'no',
toolbar: 'no',
width: window.screen.width,
height: window.screen.height
},
commongConfig: {
clientId: '1625070294abcdef',
responseType: 'token',
redirectUri: 'http://localhost:3000'
}
};
问题如下。 在 ionic 应用程序中,FB 身份验证窗口打开。用户进行身份验证..但现在不是关闭窗口..同一个小窗口加载我的 Angular 网站(来 self 之前提到的 MEAN 网站)
这告诉我,在收到来自 FB authen 的 token 后...它被发送到我的 Express 服务器。现在, express 服务器不再将长期 token 发送回我的 ionic 应用程序,而是发送整个 Angular 应用程序。
在 Express 服务器上检索长期 token 的代码如下所示:
var accessTokenUrl = 'https://graph.facebook.com/oauth/access_token';
var params = {
'client_id': req.body.clientId,
'redirect_uri': req.body.redirectUri,
'client_secret': conf.FACEBOOK_SECRET,
code: req.body.code
};
console.log(params);
request.get({url: accessTokenUrl, qs: params}, function (err, response, token) {
if (err) {
callback(err);
}
var accessToken = qs.parse(token);
...
...
retreive user details from FB using this accessToken (code hidden for sake of clarity
..
..
res.status(200).send({
user: user.toJSON(),
token: token
});
});
我相信我在这里犯了一些根本性的错误。
ionic 应用程序归根结底是一个网站(就 Facebook 而言)?
我应该能够使用相同的 Express 后端来为我的网站和 IONIC 应用程序进行身份验证并提供 REST 服务?
由于网站(Angular APP)与express服务器由同一台服务器提供服务..它不需要satellizer配置中的redirectUri参数..(默认情况下这是expresss正在监听的URI)?
由于 ionic 应用程序不会由 Express 服务器提供服务..我们必须在 satellizer 配置中显式指定重定向 URI。 重定向 URI 应该是 Express 正在监听的地址和端口?
最佳答案
有类似的问题,但您可能想查看 ionic.project 文件:
{ "app_id": "", "proxies": [ { path: "/api", "proxyUrl": "http://localhost:3000"} ] }
这样,您就可以将 $authProvider
设置为:
$authProvider.twitter({ url: '/api/user/twitter' });
然后,您在“/user/twitter”处创建一条 Express 路由——当 FB 或 Twitter 等尝试重定向回询问者页面时,它会命中您的 ionic.project 代理并将其直接发送到 Express/Sails/Server,您可以以 GET 的形式捕获该请求,处理它,创建用户等。显然,我的经验是使用 Twitter,但它都是标准化的,所以我认为这对您有用。
希望这会有所帮助!
关于node.js - 使用带有 ionic 和express 的卫星器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157681/