Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var LocalStrategy = require('passport-local').Strategy;
- passport.use(
- new LocalStrategy(
- {
- usernameField: 'username',
- passwordField: 'password',
- },
- (username, password, done) => {
- let session = driver.session();
- session
- .run(
- 'MATCH (u:User) WHERE u.username = {username} AND u.password = {password} RETURN u as user',
- { username, password }
- )
- .then(results => {
- try {
- let user = results.records[0].get('user').properties;
- done(null, user);
- } catch (err) {
- done(null, false);
- } finally {
- session.close();
- }
- })
- .catch(err => {
- session.close();
- done(err);
- });
- }
- )
- );
- passport.serializeUser(function(user, done) {
- done(null, user.username);
- });
- passport.deserializeUser(async (username, done) => {
- let session = driver.session();
- try {
- let results = await session.run(
- 'MATCH (u:User) WHERE u.username = {username} RETURN u AS user;',
- { username }
- );
- let user = results.records[0].get('user').properties;
- done(null, user);
- } catch (err) {
- done(err, false);
- } finally {
- session.close();
- }
- });
- app.use(passport.initialize());
- app.use(passport.session());
- const auth = (req, res, next) => {
- if (!req.isAuthenticated()) {
- res.sendStatus(401);
- res.end();
- } else {
- next();
- }
- };
- app.post('/login', passport.authenticate('local'), (req, res) => {
- res.send(_.omit(req.user, 'password'));
- res.end();
- });
- app.get('/logout', function(req, res) {
- req.logout();
- res.redirect('/login');
- });
- app.get('/authenticated', auth, (req, res) => {
- res.send(_.omit(req.user, 'password'));
- res.end();
- });
- app.post('/signup', async (req, res) => {
- let { username, password, password_repeat, email } = req.body;
- if (password !== password_repeat) {
- res.sendStatus(409);
- res.end();
- } else {
- try {
- let session = driver.session();
- let results = await session.run(
- `
- CREATE (u:User { username: {username}, password: {password}, email: {email} })
- RETURN u AS user;
- `,
- { username, password, email }
- );
- let user = results.records[0].get('user').properties;
- req.login(user, err => {
- if (!err) {
- res.send(_.omit(user, 'password'));
- res.end();
- } else res.redirect('/login');
- });
- } catch (err) {
- console.error(err);
- res.status(400).send({ error: 'Username already exists.' });
- res.end();
- } finally {
- session.close();
- }
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement