我正在尝试为多个不同的平台(包括桌面)构建一个应用程序--使用电子技术。现在,我遇到了问题,继续一个日志记录过程,直到结束。
我知道电子使用世博反应本地Web功能,但我不明白如何在重定向之后继续日志记录过程。
这就是我尝试过的:
const useProxy = Platform.OS !== 'web';
export function AuthScreen() {
const {nextState} = useAuth();
const discovery = AuthSession.useAutoDiscovery('https://my-open-id.url');
const redirectUri = AuthSession.makeRedirectUri({
useProxy,
});
// Create and load an auth request
const [request, , promptAsync] = AuthSession.useAuthRequest(
{
clientId: 'client-id',
clientSecret: 'client-secret',
redirectUri,
scopes: ['openid', 'profile', 'email', 'offline_access'],
},
discovery
);
const login = useCallback(async () => {
const result = await promptAsync({useProxy});
console.log({result});
if (!result) {
return;
}
switch (result.type) {
case "cancel":
case "dismiss":
return;
case "error":
return;
case "locked":
return;
case "success":
const token = result.authentication;
nextState(token);
return;
}
}, [promptAsync]);
if (Platform.OS !== 'web') {
useEffect(() => {
WebBrowser.warmUpAsync();
return () => {
WebBrowser.coolDownAsync();
}
}, []);
}
return (
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
<Text>Auth Screen</Text>
<Button title="Login!" disabled={!request} onPress={login}/>
</View>
);
}每当我点击Login按钮时,我就被重定向到我的OAuth2服务器,并且我可以登录。在那之后,我应该被重定向到我的应用程序,但没有。

在登录过程之后,新窗口仍然存在,应用程序的另一个实例继续存在。

我也在寻找电子特性,以了解如何对其进行足够的黑客攻击,这样就有了充分的工作流程,但我仍然不知道如何从代码的反应本机部分访问电子的主要进程。
任何帮助都将不胜感激。
发布于 2021-08-26 13:40:37
世博正在使用一个私用URI计划来监听登录共鸣,所以首先要确保您已经根据文档正确注册了它。
接收深度LINKS
一旦你知道了你的应用程序的方案,一个简单的测试方法就是通过这样的命令来测试它,这取决于你是运行在Mac上还是运行在Windows上:
open x-mycompany-desktopapp:/somepath
start x-mycompany-desktopapp:/somepath我将确保登录发生在系统浏览器中,正如RFC8252中所建议的那样。避免登录反应本机窗口。
在浏览器中,您应该看到提示将登录响应返回到应用程序。有一些截图在我的博客帖子为一个普通的电子OAuth安全的应用程序。
电子多实例逻辑
我的电子OAuth桌面代码示例使用了私有URI方案,并处理了您提到的多实例问题--参见这段代码和requestSingleInstanceLock的使用。
希望这些笔记能给你一些线索和可能的行动。在我开发这个程序的时候,一个很大的里程碑就是能够从我的main.ts源文件中捕获日志语句!
OAuth在UI中是很难实现的,有时更高层次的技术(如世博)几乎没有什么可见性。
https://stackoverflow.com/questions/68938385
复制相似问题