https://github.com/survi218/oauth-passport-facebook
Passport OAuth support through the passport-facebook module
https://github.com/survi218/oauth-passport-facebook
facebook oauth2 passport passport-facebook passport-local user-authentication
Last synced: 3 months ago
JSON representation
Passport OAuth support through the passport-facebook module
- Host: GitHub
- URL: https://github.com/survi218/oauth-passport-facebook
- Owner: survi218
- Created: 2017-06-09T22:49:23.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-06-09T23:48:12.000Z (almost 8 years ago)
- Last Synced: 2025-03-05T21:57:38.684Z (3 months ago)
- Topics: facebook, oauth2, passport, passport-facebook, passport-local, user-authentication
- Language: JavaScript
- Homepage:
- Size: 3.94 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# oauth-passport-facebook
* By using the Passport OAuth support through the passport-facebook module together with Facebook's OAuth support to enable user authentication within your server.
- Configure your server to support user authentication based on OAuth providers
- Use Passport OAuth support through the passport-facebook module to support OAuth based authentication with Facebook for your users.
# Installing passport-facebook Module
In the project folder, install passport-facebook module by typing the following at the prompt:
````
npm install passport-facebook --save
````* Refactoring Authentication Code
- Create a new file named authenticate.js and add the following code to it:
````
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./models/user');
var config = require('./config');exports.local = passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
````* Updating app.js
- Update app.js to include authenticate.js module:
````
var authenticate = require('./authenticate');
````- Remove the following line:
````
var LocalStrategy = require('passport-local').Strategy;
````
* Also, remove the following lines from the passport configuration part of app.js:
````
var User = require('./models/user');passport.use(new LocalStrategy(User
.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
````* Updating config.js
- Update config.js as follows:
````
module.exports = {
'secretKey': '12345-67890-09876-54321',
'mongoUrl' : 'mongodb://localhost:27017/dbname',
'facebook': {
clientID: 'YOUR FACEBOOK APP ID',
clientSecret: 'YOUR FACEBOOK SECRET',
callbackURL: 'https://localhost:3443/users/facebook/callback'
}
}
````* Updating User Model
- Open user.js from the models folder and update the User schema as follows:
````
var User = new Schema({
username: String,
password: String,
OauthId: String,
OauthToken: String,
firstname: {
type: String,
default: ''
},
lastname: {
type: String,
default: ''
},
admin: {
type: Boolean,
default: false
}
});
````* Setting up Facebook Authentication
- Open authenticate.js and add in the following line to add Facebook strategy:
````
var FacebookStrategy = require('passport-facebook').Strategy;
````Then add the following code to initialize and set up Facebook authentication strategy in Passport:
````
exports.facebook = passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL
},
function(accessToken, refreshToken, profile, done) {
User.findOne({ OauthId: profile.id }, function(err, user) {
if(err) {
console.log(err); // handle errors!
}
if (!err && user !== null) {
done(null, user);
} else {
user = new User({
username: profile.displayName
});
user.OauthId = profile.id;
user.OauthToken = accessToken;
user.save(function(err) {
if(err) {
console.log(err); // handle errors!
} else {
console.log("saving user ...");
done(null, user);
}
});
}
});
}
));
````
* Updating users.js
- Open users.js and add the following code to it:
````
router.get('/facebook', passport.authenticate('facebook'),
function(req, res){});router.get('/facebook/callback', function(req,res,next){
passport.authenticate('facebook', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).json({
err: info
});
}
req.logIn(user, function(err) {
if (err) {
return res.status(500).json({
err: 'Could not log in user'
});
}
var token = Verify.getToken(user);
res.status(200).json({
status: 'Login successful!',
success: true,
token: token
});
});
})(req,res,next);
});
````* Registering your app on Facebook
- Go to https://developers.facebook.com/apps/ and register your app by following the instructions there and obtain your App ID and App Secret, and then update config.js with the information.
* Start your server and test your application. You can log in using Facebook by accessing https://localhost:3443/users/facebook which will redirect you to Facebook for authentication and return to your server.
* Conclusions
- Using the Facebook OAuth support to enable authentication of your users and allowing them access to your server.