【发布时间】:2017-03-19 05:17:06
【问题描述】:
我正在 Ionic 2 中创建一个应用程序,它使用来自现有站点的 web api。要使用此 API,我必须通过以下方式在其中进行验证(类似于 facebook 登录):
- 我在 InAppBrowser 组件中调用 api 登录页面,发送正确的密钥和返回 URL。
- 用户在显示的表单中输入登录名和密码,API 将对其进行验证和验证。
- API 调用返回 URL 并传递授权令牌。
- 我在 InAppBrowser 'loadstart' 事件中“劫持”这个重定向到返回 url,并提取并存储授权令牌。
- 在对 API 的以下调用中,我在标头中发送授权令牌。
这在模拟器中一切正常,但在浏览器中不起作用(使用离子服务),因为当我调用 InAppBrowser 时,它实际上调用了 window.open,并且事件不起作用。我无法检测到在打开的窗口中进行的重定向操作。
我想在浏览器中进行这项工作,因为在那里调试应用程序更好。我的第一个想法是发送“http://localhost:8001”作为返回 url,但我找不到在 ionic 应用程序中捕获令牌参数的方法。
有谁知道我如何捕捉这个参数或任何其他方式使这个登录在浏览器中工作?它仅用于开发和调试目的,因此严格的安全性不是问题(我可以注释掉生产版本中的任何不安全代码)。
编辑:Hayden Braxton 的答案并没有解决我的问题,但由于它是因为我的应用程序独有的东西,它确实可以帮助想要使插件工作的人,我将它保留为选定的答案。
除此之外,我将分享我找到的解决问题的方法,以防它对任何人有所帮助。其实很简单:
- 我将“http://localhost:8001”作为api return_uri参数传递
- api会在检查登录名和密码后重定向到http://localhost:8001?token=MY_AUTH_TOKEN。
- 这将重新加载应用程序并再次调用登录页面。
- 在登录页面我调用
this.platform.getQueryParam("token");来获取令牌。
【问题讨论】:
-
inAppBrowser 是一个cordova plugin。离子服务中未加载cordova插件..
-
我知道,我正在寻找一种替代方法来使登录在 ionic serve 中工作。
-
那么我的解决方案解决了您的问题吗?如果是,如果您能将其标记为解决方案,那就太好了,如果不是,请发布有助于我们找到解决方案的其他详细信息。
-
为了社区的利益,您可能还需要考虑编辑问题的标题。如果我错了,请纠正我,但在更大范围内,您的问题似乎更多是关于在浏览器中运行时让离子插件工作,而您的登录问题似乎是这个更大问题的副作用。其他人也会有同样的问题,让插件工作,所有这些都有不同的应用程序和需求。
-
我使用这个标题是因为我的目标不是让插件工作,而是让登录工作,不管有没有插件,但我知道新标题会根据答案帮助其他人,所以我会改变它。
标签: api authentication ionic-framework ionic2