栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

User.findOrCreate函数的作用是什么?何时在护照中调用它?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

User.findOrCreate函数的作用是什么?何时在护照中调用它?

User.findOrCreate
是一种虚构函数,表示通过Facebook
ID查找用户或创建不存在的用户所需的任何功能。我认为您的第一个问题是回调URL只会进入您的根目录,因此您可能永远都无法使用该功能。

您的回调网址应为

http://localhost:3000/auth/facebook/callback

然后处理该URL:

app.get('/auth/facebook/callback',   passport.authenticate('facebook', { failureRedirect: '/login' }),  function(req, res) {    res.redirect('/');  });

至此,身份验证完成。

accessToken
返回给您-“应用程序每次调用API代表他们读取,修改或写入特定人的Facebook数据时,都需要这样做”。您应该将其保存在存储用户访问令牌的某些表中。
profile
是另一个关键变量,因为这是有关用户的信息(哪些信息取决于服务)。

您在该功能内所做的一切取决于您
。因此,请自行制作

User.findOrCreate
。这是Facebook护照上的代码,并附有一些解释说明。假设您正在使用MongoDB之类的东西并且有一个
User
表。
User
在这种情况下,您声明的任何变量都可以与
User
表进行交互。

//Use facebook strategypassport.use(new FacebookStrategy({        clientID: config.facebook.clientID,        clientSecret: config.facebook.clientSecret,        callbackURL: config.facebook.callbackURL    },    function(accessToken, refreshToken, profile, done) {        //check user table for anyone with a facebook ID of profile.id        User.findOne({ 'facebook.id': profile.id         }, function(err, user) { if (err) {     return done(err); } //No user was found... so create a new user with values from Facebook (all the profile. stuff) if (!user) {     user = new User({         name: profile.displayName,         email: profile.emails[0].value,         username: profile.username,         provider: 'facebook',         //now in the future searching on User.findOne({'facebook.id': profile.id } will match because of this next line         facebook: profile._json     });     user.save(function(err) {         if (err) console.log(err);         return done(err, user);     }); } else {     //found user. Return     return done(err, user); }        });    }));

我个人也使用“会员”表来跟踪每个用户的多个帐户(以便他们可以通过多个帐户进行身份验证),因为我是通过猫鼬设置的。实际上,这是我存储该访问令牌的位置。我更喜欢在用户表中有一个Facebook列…。但这取决于您。

var mongoose = require('mongoose'),    Schema = mongoose.Schema,    ObjectId = Schema.ObjectId;var membershipSchema = new Schema({    provider:  String,    providerUserId:  String,    accessToken: String,    userId: {type: ObjectId, ref: 'User'},    dateAdded: {type: Date, default: Date.now}});module.exports = mongoose.model('Membership', membershipSchema);

因此,我的版本

User.findOrCreate
开始像这样:

function(accessToken, refreshToken, profile, done) {    Membership.findOne({        providerUserId: profile.id    }, function(err,membershipData) { //blah blah blah

其中成员资格是上述模型,并且被定义为以下变量:

var Membership =  require('./models/membership.js')


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号