use*_*455 5 dart google-signin flutter
我在我的 flutter 应用程序中使用 google_sign_in 进行身份验证。
我按照此处记录的步骤开始:
我按照建议获取 idToken 在服务器端执行身份验证。
这是我用来获取 idToken 的代码片段
_googleSignIn.onCurrentUserChanged.listen(
(GoogleSignInAccount account) {
setState(() {
developer.log("************Changing account");
_currentUser = account;
account.authentication.then((key){
developer.log("########### Changing token");
_userToken=key.idToken;
});
});
});
Run Code Online (Sandbox Code Playgroud)
当我发送 idToken(上面示例中的 _userToken)时,它在一段时间内工作正常,后来我在服务器端看到以下错误消息:
令牌已过期,1593370077 < 1593384191
看起来token是有过期时间的,过一段时间就会过期。
我尝试将上面的代码片段从 initState() 移至 build()。这是我的假设,如果我每次构建小部件时都调用它,我应该获得一个新令牌。那不起作用
我认为它可能起作用的原因是因为当我“运行.dart”(不是热重载)时它起作用。这让我认为将其移动到构建可能会起作用。没用
我的问题:刷新令牌或使用 google_sign_in 在 flutter 中获取新令牌的编程方式是什么。
感谢您的帮助!!
idToken 每 30 分钟过期一次。要刷新令牌,您可以使用API或执行静默登录,如下所示:
Future<String> refreshToken() async {
final GoogleSignInAccount googleSignInAccount =
await googleSignIn.signInSilently();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
await auth.signInWithCredential(credential);
return googleSignInAuthentication.accessToken; //new token
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3062 次 |
| 最近记录: |