我正在构建一个需要外部身份验证提供程序验证的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()打开时,深层链接工作正常。
非常感谢任何帮助。
答案 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。