通过 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 中获取用户上下文