在发出 OAuth 令牌交换请求时,如何进行深层链接并导航到“LogInLoading”屏幕?

Posted

技术标签:

【中文标题】在发出 OAuth 令牌交换请求时,如何进行深层链接并导航到“LogInLoading”屏幕?【英文标题】:How do I deep link and navigate to a "LogInLoading" screen while the OAuth token exchange request is made? 【发布时间】:2019-07-19 21:36:07 【问题描述】:

配置我的应用以使用 OAuth。一旦我从重定向 uri 中获得了 auth_code,我希望用户被带到“登录加载”页面,在发生令牌交换请求时会显示加载微调器。

该应用已正确配置 ios 端以允许深度链接,我被带回该应用,只是到了错误的页面。

我关注了来自 React Navigation 的 the official 深度链接指南,以及各种 Stack Overflow 页面和 Medium 文章。

这是我的App.tsx 组件:

const prefix = 'myapp://'

export const App = () => 
    return (
        <ThemeProvider theme=theme>
            <Routes uriPrefix=prefix />
        </ThemeProvider>
    )

这是我的Routes.ts

const AuthStack = createStackNavigator( Onboarding: OnboardingFlowScreen, SignIn: SignInScreen )
const AppTabBar = createBottomTabNavigator( Feed: FeedScreen, Create: CreateScreen, Profile: ProfileScreen )

export const Routes = createAppContainer(
    createSwitchNavigator(
        AuthLoading: AuthLoadingScreen,
        LogInLoading:  screen: LogInLoadingScreen, path: 'auth_success' ,
        App: AppTabBar,
        Auth: AuthStack,
    )
)

我应该被带回应用程序并导航到LogInLoading 屏幕。我是不是误会了? Linking.openURL('myapp://auth_success') 不应该带我到指定路径auth_success 的页面吗?

【问题讨论】:

你找到安卓的修复了吗?因为我也面临同样的问题 【参考方案1】:

该 URL 只能启动您的应用程序。

要将用户带到特定屏幕,您需要提供基于 URL 的导航上下文。

每当您的应用通过远程 URL 打开时,您都会在 AppDelegate 方法中收到回调 AppDelegate.application(_:open:options:) 在这里您可以导航到您想要的屏幕。

Offocial Apple Documentation on URL Scheme

在此处参考问题IOS: Load a View Controller When App is Launched from Browser using url schemes?

【讨论】:

以上是关于在发出 OAuth 令牌交换请求时,如何进行深层链接并导航到“LogInLoading”屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2 - 检索令牌时 OPTIONS 请求的状态 401

OAuth中授权码的用途是啥

使用 Spring Security OAuth2 进行访问令牌请求的 JWT 不记名交换

Laravel OAuth2 Passport API,生成令牌但无法发出请求:“未经身份验证”

从 Firebase 云函数调用时,OAuth2 访问令牌交换失败

向 Google 进行身份验证时,从 Spring OAuth2 授权服务器发出 JWT 令牌