passport-facebook /callback 在 safari 中打开新选项卡而不是使用当前选项卡

问题描述 投票:0回答:1

我在nestjs应用程序中使用passport-faceebook,并在其中有一个带有/callback路由的控制器。 在我做了一些身份验证之后,我调用重定向到客户端主页。 Google 策略在同一个选项卡中完成所有操作(Safari 和 Chrome)。但 Facebook 策略在身份验证后留下了两个选项卡。我希望只留下主页选项卡,不需要留下身份验证页面。 在 Chrome 中,facebook-strategy 按预期在一个选项卡中重定向。 此行为仅在 Safari 中出现。 所有浏览器均已更新至最新版本。

@Controller('auth')
export class AuthController {
    constructor(
        private authService: AuthService,
        private cookiesService: CookiesService,
    ) { }

    @Get('facebook')
    @UseGuards(FacebookAuthGuard)
    fbAuth() {}

    @Get('facebook/callback')
    @UseGuards(FacebookAuthGuard)
    async fbAuthCallback(
        @Req() req: Request,
        @Res() res: Response,
        @Query('state') state: string,

    ) {
        const {
            accessToken,
            refreshToken,
        } = await this.authService.authWithProvider(req.user as CreateUserDto);

        this.cookiesService.setAccessTokenCookie(res, accessToken);
        this.cookiesService.setRefreshTokenCookie(res, refreshToken);

        const { origin } = JSON.parse(state);
        res.redirect(`${process.env.CLIENT_URL}${origin || ''}`);
    }

    @UseGuards(GoogleAuthGuard)
    @Get('google')
    googleAuth() { }

    @UseGuards(GoogleAuthGuard)
    @Get('google/callback')
    async googleAuthCallback(
        @Req() req: Request,
        @Res() res: Response,
        @Query('state') state: string,
    ) {
        const {
            accessToken,
            refreshToken,
        } = await this.authService.authWithProvider(req.user as CreateUserDto);

        this.cookiesService.setAccessTokenCookie(res, accessToken);
        this.cookiesService.setRefreshTokenCookie(res, refreshToken);

        const { origin } = JSON.parse(state);
        res.redirect(`${process.env.CLIENT_URL}${origin || ''}`);
    }
}

预计在使用 facebook-pasport 在 safari 中进行身份验证后会出现一个选项卡 尝试更改客户端请求(使用“next/navigation”中的 nextjs 路由器)

router.push(`${process.env.API_URL}/auth/facebook?origin=${encodeURIComponent(path || '')}`);
window.open(`${process.env.API_URL}/auth/facebook?origin=${encodeURIComponent(path || '')}`, '_self');
next.js safari nestjs passport-facebook
1个回答
0
投票

如果在 Safari 中固定选项卡,则会出现问题 可能是 Safari 错误

© www.soinside.com 2019 - 2024. All rights reserved.