【发布时间】:2020-12-10 11:14:32
【问题描述】:
我是苗条的新手,所以也许我遗漏了一些明显的东西。我想在我的 Svelte 应用程序中使用 OAuth2。没有 npm 包,所以我需要使用常规的<script> 来加载它。我想从 Google api 中检索用户并将其显示在我组件的变量中。目前我正在将脚本加载到<svelte:head> 组件中,这工作正常。这是我的工作代码:
<svelte:head>
<script src="https://apis.google.com/js/platform.js?onload=init" async defer></script>
<script>
function init() {
gapi.load("auth2", function () {
gapi.auth2
.init({
clientId: "my_clientId",
apiKey: "my_apiKey",
})
.then(() => {
GoogleAuth = gapi.auth2.getAuthInstance(); // Create instance
if (GoogleAuth.isSignedIn.get()) { // If signed in, log name
const profile = GoogleAuth.currentUser.get().getBasicProfile();
console.log("Full Name: " + profile.getName());
} else { // Else trigger login
GoogleAuth.signIn();
}
});
});
}
</script>
</svelte:head>
如果用户已登录,此代码将console.log 用户名,否则将触发谷歌登录弹出窗口。
如何将从 GoogleAuth 检索到的用户配置文件存储在我的 Svelte 组件中的变量中,而不是仅仅记录它?我尝试过these suggestions,还尝试将on:load={} 函数传递给我的svelte:head>,如here 所示。
【问题讨论】:
-
您是否尝试过使用svelte store?您可以存储用户配置文件,然后以反应方式将其再次获取到另一个文件中。
-
@johannchopin 这正是我想做的。但是我现在使用的函数在
<svelte:head>中。我认为我无法从svelte:head>中访问商店。 -
是的,你是对的,实际上它不起作用。但实际上将这个函数放在
head中的目标是什么? -
@johannchopin 我需要先等待 gapi 包加载。加载后,我可以验证当前用户。我可以等待包加载然后验证用户的唯一方法是将函数放在头部,然后在加载时调用 init 函数。如果有一种方法可以做到这一点而不将函数放在
head中,那很好。 -
当然你可以在你的 entry svelte 组件的 Mount 上做到这一点。在执行其他所有操作之前,请等待此功能。
标签: javascript oauth-2.0 svelte