在React Native

时间:2017-10-30 14:11:41

标签: javascript android react-native webview oauth-2.0

我正在构建一个需要外部身份验证提供程序验证的Android应用程序。所以我使用react-native-oauth程序包来处理这个问题。

定义的redirect_uri是一个深层链接,理想情况下应该在成功验证后打开我的应用程序。但是WebView似乎没有处理这个重定向,而且我没有找到404页面的响应。

这是我为处理身份验证而编写的服务:

    const manager = new OAuthManager('<app_name>')

    manager.addProvider({
         'provider': {
                  auth_version: '2.0', 
                  authorize_url:'<auth-url>',
                  access_token_url: '<auth-url>/token',
                  callback_url: 'http://localhost/provider',
         }
    });

    manager.configure({
       provider: {
           client_id: '<id>',
           client_secret: '<secret>',
           redirect_uri: '<redirect-uri>' //DEEP LINK HERE
      }
    });
   module.exports = {
      authManager: () => {
      manager.authorize('<provider>')
                        .then(resp => console.log(resp))
                        .catch(err => console.log(err));    
                    }
   }

此外,我已根据how to declare the deep links for your apps上的Android文档中的说明定义了我的intent-filter。使用应用程序组件中的Linking.openURL()打开时,深层链接工作正常。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

您无法直接将redirect_uri设置为移动应用(因为大多数身份验证提供商不支持自定义OAuth方案)。

但您可以创建一些接受来自OAuth提供商的重定向的网页,并打开您的应用(并发送所有重定向参数,如token)。

例如,您创建了网页https://example.com/oauth/,并将callback_url设置为https://example.com/oauth/XXXXX_provider,因此当用户被重定向到网页https://example.com/oauth/XXXXX_provider&token=xxx时,它会使用{{1}打开您的应用}}

您可以使用Deeplink处理appName://example/oauth/google?token=xxx(它将在设备上安装时打开您的移动应用)

处理重定向的页面示例:

appName://example/oauth/google?token=xxx

答案 1 :(得分:1)

默认情况下,WebView不与Safari / Chrome共享Cookie /会话数据。因此,它不适用于登录流程,因为它不使用Chrome / Safari中现有的登录会话。

Expo提供了WebBrowser api,可以打开Safari / Chrome而不是webview。请注意,它会在应用内打开Safari / Chrome,而不是使用Linking重定向您的浏览器。因此,用户始终在浏览器中有一个按钮可以返回到您的应用。

您可以使用WebBrowser.openAuthSessionAsync(url)打开与设备中的本机浏览器共享Cookie /会话信息的安全会话。

Expo还提供了另一个名为AuthSession的api,它简化了许多样板并提供了一个简单的api。