Facebook登录和node js服务器
Facebook login and node js server
我正在尝试创建一个类似于Tinder的android应用程序。
到目前为止,我所拥有的是登录facebook,它的工作原理是这样的:用户发送访问令牌到我的服务器(在node js中编写),然后它使用paspport-facebook-token库授权他。
现在我需要创建一个使用mongoose的用户数据库。我应该怎么做,在哪里做?如何保存用户,如果我只有facebook登录?我需要用什么来拯救用户群?
这是我的服务器路由。js代码:
module.exports = function(app) {
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/', function(req, res) {
res.end("Node-Android-Chat-Project");
});
passport.use(new FacebookStrategy({
clientID: *****1246,
clientSecret: "******",
callbackURL: "http://localhost:8080/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
console.log("accesToken ", accessToken)
console.log ("refreshToken", refreshToken)
console.log ("profile", profile)
user = {} // find or create a user in your database
done(null, user)
}
));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect : '/profile',
failureRedirect : '/'
}));
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback
app.post('/auth/facebook/token', function(req, res, next) {
passport.authenticate(['facebook-token'], function(err, user, info) {
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting authentication status
if (! user) {
console.log(req.user);
return res.send({ success : false, message : 'authentication failed' });
}
console.log("Success!!");
return res.send({ success : true, message : 'authentication succeeded' });
})(req, res, next);
});
/*app.post('/auth/facebook/token',
passport.authenticate('facebook-token'),
function (req, res) {
console.log(req)
// do something with req.user
res.send(req.user? 200 : 401);
}
); */
//app.get('/auth/facebook', passport.authenticate('facebook'));
//app.get(, );
// Facebook will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/login' }));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
};
您几乎准备好了,现在需要做的就是将该用户保存到db中。我为猫鼬使用了一个漂亮的小插件findOneOrCreate,其中为findAndModify提供了一个快捷方法,它实际上是连续查找和创建(查看这个堆栈溢出答案以获得真正的findAndModify)。您可以使用upsert选项来获得此行为)
var mongoose = require('mongoose');
var findOneOrCreate = require('mongoose-find-one-or-create');
var User = new mongoose.Schema({
facebookId: {
type: 'String',
unique: true,
sparse: true
},
firstName: {
type: 'String',
match: mongo.nameRegex
},
lastName: {
type: 'String',
match: mongo.nameRegex
},
birthday: {type: 'Date'}
}, { collection: 'users' });
User.plugin(findOneOrCreate);
然后使用以下代码:
passport.use(new FacebookStrategy({
clientID: *****1246,
clientSecret: "******",
callbackURL: "http://localhost:8080/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
console.log("accesToken ", accessToken)
console.log ("refreshToken", refreshToken)
console.log ("profile", profile)
var user = {
facebookId: profile.id,
firstName: profile._json.first_name,
lastName: profile._json.last_name,
birthday: profile._json.birthday
};
//the same User variable from above
User.findOneOrCreate({facebookId: profile.id}, user, function (err, user) {
return done(err, user, {type: 'facebook'});
});
}
));
之后,在你的路由处理程序中,你将有权访问当前在req.user
中认证的用户。
,
app.get('/me', passport.authenticate('facebook-token'), function(req, res) {
res.status(200).send(req.user);
});
Facebook登录已经转移到一个新的GraphQL api。您可以在这里看到如何将Facebook登录与Node.js服务器集成:https://medium.com/authpack/facebook-auth-with-node-js-c4bb90d03fc0
相关文章:
- 使用node.js服务器中的evernote api获取note内容
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 在HTML页面上显示node.js服务器中的数据
- Node.js服务器和浏览器之间共享二进制缓冲区
- Electron:Express.js服务器在Mongo数据库'It’准备好了
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 如何在node.js服务器上使用AnnYang语音重新配置
- 使用 Vue.js 调用 Node.js 服务器
- 当通过Node.js服务器访问时,Javascript文件在Chrome上工作,但从文件夹打开时不工作
- 从android连接到node.js服务器时出现问题
- 简单的node.js服务器,它发送html+css作为响应
- Express.js服务器没有响应-如何调试
- 如何从node.js服务器接收nvd3.js中的数据
- 如何将Node.js服务器连接到Apache服务器
- 如何使用node.js服务器显示图像
- 提高网络速度并连接到node.js服务器时出现意外行为
- 正在使用node.js服务器请求文件
- Node.js服务器在没有调用“;end()"用于服务器发送的事件
- node.js服务器和客户端的代码进行连接
- RTS HTML5多人游戏-启动node.js服务器ingame