Igor Suvorov
Программист-предприниматель
Занятие 11
6 May 2017
Профессия
Node.js & React.js developer
продвинутый курс
4й урок: youtube.com/watch?v=ljEMclTRuHw
&
OAuth2
принципы работы
const user1 = {
name: 'Steve',
avatar: 'steve.jpg',
passports: [
LocalPassport,
]
};
const user2 = {
name: 'Robert',
avatar: 'robert.jpg',
passports: [
FacebookPassport,
TwitterPassport,
VkontaktePassport,
]
};
const user3 = {
name: 'Jack',
avatar: 'jack.jpg',
passports: [
FacebookPassport,
TwitterPassport,
LocalPassport,
]
};
const user4 = {
name: 'Gleb',
avatar: 'glen.jpg',
passports: [
]
};
choose strategy
> npm install passport
> npm install passport-facebook
> npm install passport-twitter
> npm install passport-vkontakte
Configure Strategy
import passport from 'passport';
import Facebook from 'passport-facebook';
import config from './config/auth';
passport.use(new Facebook.Strategy({
clientID: config.FACEBOOK_APP_ID,
clientSecret: config.FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
Authenticate Requests
app.get('/auth/facebook',
passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
Passport.userId -> User._id
А нужно ли использовать локальный пасспорт ??
Что такое username ?
поля: (info, profile) (meta, values) (private)
Express static middleware
app.use(express.static('public')) // directory only
app.use('/static', express.static('static'))
app.use('/api', ...)
import staticFile from 'connect-static-file';
app.use('/bundle.js', staticFile('generated/bundle.js')); // file
app.use('/static', staticFile('public')); //directory
app.use('/favicon.ico', (req, res) => {
if (some) {
return res.sendFile(path.join(__dirname, '../public/some/dir/favicon.ico');
}
res.sendFile(path.join(__dirname, '../public/other/dir/favicon.ico');
});
var express = require('express')
var app = express()
var multer = require('multer')
var upload = multer()
app.post('/profile', upload.array(), function (req, res, next) {
// req.body contains the text fields
})
app.post('/profile', upload.any(), function (req, res, next) {
// req.files
})
any questions?
программист-предприниматель
By Igor Suvorov