我有一个 AngularFire 身份验证服务,它工作得非常好 - 除了它不会刷新令牌。
我的刷新代码:
firebase.auth().currentUser.getIdToken(true).then((token: string) => {
const newUser = { token: token }; // new user details in brief
this.user.next(newUser);
});
Run Code Online (Sandbox Code Playgroud)
调用 firebase 服务很好并给出响应,但它只返回当前令牌并且不会刷新令牌 - 因此它仍然在 1 小时后退出应用程序。
我已经阅读了大量有关 getIdToken 的问题,但没有一个专门解决不刷新的令牌。
我做了一个 stackblitz:https://stackblitz.com/edit/angular-ivy-uvcdz7 ?file=src/app/app.component.ts 这样你就可以看到完整的代码(尽管由于某种原因它不起作用,但也是因为我无法弄清楚如何通过 SB 将项目连接到 firebase)
编辑
为了帮助还有一些我不期望的其他奇怪行为,例如在我的 ngOnInit 中我有......
this.fAuth.onAuthStateChanged((state) => {
console.log(state);
})
Run Code Online (Sandbox Code Playgroud)
当我登录或退出时,它不执行任何操作 - 没有消息表明状态已更改。当身份验证发生变化时,我期望触发的这些功能似乎都没有做任何事情。
编辑2
作为补充信息,在添加赏金之前,我对 Angular 和 AngularFire 进行了全面而痛苦的更新,所以现在 Angular 是 v13,AngularFire 是 7.2.0,看看这是否会产生任何影响,但它没有,getIdToken 仍然提供没有刷新令牌。
编辑3
所以这个函数作为答案提供如下:
public getToken$(): Observable<firebase.auth.IdTokenResult> {
return from(this.fAuth.currentUser).pipe(switchMap(user => {
return from(user.getIdTokenResult(true)).pipe(map(token => …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用这样的插入选择:
INSERT INTO users_extension_usage (userid, extensionid, complete)
SELECT '3', extensions.id FROM extensions WHERE extensions.folder='definitions', '1'
Run Code Online (Sandbox Code Playgroud)
但是当我在phpMyAdmin中运行引用'1'时它有问题:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' '1'' at line 2
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的SELECT,INSERT等组合,但我看到了问题.我已经在这里和其他论坛上查看了任何不同的帖子,但是大多数建议我使用的语法!
我试图在这里建立一个SQL小提琴:http://sqlfiddle.com/#!9/9f460
任何有关如何工作的建议都将被感激地接受:)