通过 NestJs 框架通过 Passport Facebook 登录

Posted

技术标签:

【中文标题】通过 NestJs 框架通过 Passport Facebook 登录【英文标题】:Login by Passport Facebook by nestJs framework 【发布时间】:2020-07-18 15:03:06 【问题描述】:

我正在尝试通过 API 端点(我的第一次)为主要使用 NestJs 框架和护照库的移动应用程序构建 Facebook 登录

我已经关注了这篇文章here,但我不知道接下来会发生什么?!访问端点时也只是说未授权!

如果不存在,我需要注册一个用户,如果存在,我需要登录

到目前为止我的代码(FB 策略)

import  Injectable  from "@nestjs/common";
import  use  from "passport";
import  UsersService  from "../routes/users/users.service";
import PassportFacebookToken = require("passport-facebook-token");

@Injectable()
export class FacebookStrategy 
  constructor(
    private readonly userService: UsersService,
  ) 
    this.init();
  
  init() 
    use(
      new PassportFacebookToken(
        
          clientID: '',
          clientSecret: '',
          fbGraphVersion: 'v3.0',
        ,
        async (
          accessToken: string,
          refreshToken: string,
          profile: any,
          done: any,
        ) => 
          const user = await this.userService.create(
            
                username: profile.displayName,
                email: profile.emails[0].value,
                picture: profile.photos[0].value,

            ,
          );
          return done(null, user);
        ,
      ),
    );
  

服务:

async create(
  user: Partial<UserDTO>
): Promise<UserDTO> 
  let userExist: UserDTO = await this.userRepository.findOne( where:  username: user.username  );

  if (userExist) 
    throw new HttpException('User already exists', HttpStatus.BAD_REQUEST);
  

  let createdUser = this.userRepository.create(user);
  return (await this.userRepository.save(createdUser));

控制器

@UseGuards(AuthGuard('facebook-token'))  
@Get('facebook')
async getTokenAfterFacebookSignIn(
    @Req() req: any
) 
    // return this

【问题讨论】:

【参考方案1】:

您的客户端需要传输登录后从 Facebook 收到的 access_token,将 access_token 作为查询参数发送到您的 Facebook 身份验证端点。

GET /auth/facebook?access_token=<TOKEN_HERE>

您应该查看here 以获得澄清

【讨论】:

【参考方案2】:

如果有人是新来的或者仍然关注这个问题,有一个很棒的 npm 包,它在你的 NestJS 应用程序中提供了各种社交登录实现。您可以使用 google、facebook、twitter 等登录。

https://github.com/mjangir/nestjs-hybrid-auth

【讨论】:

以上是关于通过 NestJs 框架通过 Passport Facebook 登录的主要内容,如果未能解决你的问题,请参考以下文章

NestJs - 无法在 RolesGuard 中获取用户上下文

更新nestjs/graphql后没有通过标头

NestJS / NodeJS / Passport / JWT - 股票当前用户

NestJs Passport jwt 未知策略

NestJS jwt-passport 身份验证

NestJS & Passport:更改用户密码时更改 JWT 令牌?