oauth2访问个人资料信息facebook

时间:2018-07-31 10:44:18

标签: node.js facebook oauth-2.0 passport.js

因此,我正在开发一个简单的单页应用程序,我想使用Facebook提供程序来实现身份验证,我做到了没有大的问题,但是现在,此后,我已经从Facebook提取了用户个人资料并创建了一个帐户在我的数据库中,我能否仅返回由我的支持者生成的jwt令牌并将其用于下一个请求的身份验证,而不使用Facebook提供的访问令牌。

,如果jwt令牌到期,则用户可以从Facebook请求另一个令牌,并且当后端将收到请求时,该帐户将已经使用字段facebook_id绑定到Facebook个人资料,然后后端将重新发送另一个jwt令牌。

PS:我仅需要Facebook和google才能简化身份验证和注册(自动在facebook的用户个人资料中填充某些字段)

保存用户

async createOrUpdateFromSociel(profile: Profile) {
let user = await this.findByEmail(profile.emails[0].value)

if (user) {
  return user;
}

user = new User();

user.email = profile.emails[0].value;
user[profile.provider + 'id'] = profile.id;
user.username = profile.displayName;

return this.create(user);
}

护照策略

import { Injectable, Inject, HttpException, HttpStatus } from '@nestjs/common';
import { Model } from 'mongoose';
import { use } from 'passport';

import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-facebook';

import * as passport from 'passport'
import { User } from '../../../entities/user.entity';
import { UserService } from '../../user/user.service';




const env = require('../../../../environement');


export class FacebookStrategy extends PassportStrategy(Strategy) {
  constructor(
    @Inject('UserService')
    private userService: UserService,
  ) {

    super({
      clientID: env.FACEBOOK_CID,
      clientSecret: env.FACEBOOK_SECRET,
      callbackURL: 'http://localhost:3000/auth/facebook-cb',
      passReqToCallback: true,
      profileFields: ['id', 'displayName', 'name',  'profileUrl', 'emails', 'photos'],
    }, async (req, accessToken, refreshToken, profile, done) => {
      done(null, await this.userService.createOrUpdateFromSociel(profile))
    });

  }

}

0 个答案:

没有答案