我正在使用 googleApi 库制作带有 Flutter 的日历应用。
但是,当您关闭应用程序时,需要在网站中再次进行身份验证。 我只想要第一次认证。
有可能吗?
// 我的代码
get _SCOPES => [CalendarApi.CalendarScope];
await clientViaUserConsent(_clientID, _SCOPES, prompt)
.then((AuthClient client) async {
CalendarClient.calendar = CalendarApi(client);
calendarId = await CalendarClient.calendar.calendarList
.list()
.then((value) => value.items[0].id);
});
void saveData(AccessCredentials credentials) {
GetStorage().write(credetialKey, {
"accessTokenData": credentials.accessToken.data,
"accessTokenExpiry": credentials.accessToken.expiry.toString(),
"refreshToken": credentials.refreshToken,
"scopes": credentials.scopes,
"idToken": credentials.idToken
});
}
AccessCredentials getCredetial() {
try {
var map = GetStorage().read(credetialKey);
return AccessCredentials(
AccessToken("Bearer", map["accessTokenData"] as String,
DateTime.parse(map["accessTokenExpiry"])),
map["refreshToken"],
map["scopes"].cast<String>(),
idToken: map["idToken"] as String);
} catch (e) {
return null;
}
}
Client cli = Client();
var c = await refreshCredentials(_clientID, getCredetial(), cli)
.catchError((e) {
print(e);
});
authenticatedClient(cli, c);
错误: 详细的ApiRequestError(状态:401,消息:请求缺少所需的身份验证凭据。预期的OAuth 2访问权
答案 0 :(得分:1)
您可以使用例如 sharedPreferences
保存用户会话。每次用户启动应用程序时,您必须首先检查会话是否已保存,以便您可以跳过身份验证过程,否则您将启动身份验证
答案 1 :(得分:0)
我解决了。
保存访问凭证, 并使用 autoRefreshingClient;
Client cli = Client();
var c = await refreshCredentials(_clientID, getCredetial(), cli)
.catchError((e) {
print(e);
});
cli = autoRefreshingClient(_clientID, c, cli);