Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 护照:当地护照、特快护照和护照_Javascript_Node.js_Passport.js_Rethinkdb_Passport Local - Fatal编程技术网

Javascript 护照:当地护照、特快护照和护照

Javascript 护照:当地护照、特快护照和护照,javascript,node.js,passport.js,rethinkdb,passport-local,Javascript,Node.js,Passport.js,Rethinkdb,Passport Local,我在申请护照时遇到了问题。我正在尝试使用passport local进行身份验证,我的解决方案基于本教程: 我不断收到响应错误请求 我的节点模块结构如下: - server - auth - auth-controller.js - auth-router.js - index.js - db - index.js - views - index.html - index.js auth/auth controller.js var auth

我在申请护照时遇到了问题。我正在尝试使用passport local进行身份验证,我的解决方案基于本教程:

我不断收到响应错误请求

我的节点模块结构如下:

- server
  - auth
    - auth-controller.js
    - auth-router.js
    - index.js
  - db
    - index.js
  - views
    - index.html
- index.js
auth/auth controller.js

var authController = {};

authController.getUser = function (req, res) {
  if (req.user && req.user.id) {
    res.json(req.user);
    return;
  }
  res.status(400).json(null);
};
authController.logout = function (req, res) {
  req.logout();
  res.redirect('/');
};

authController.login = function (req, res) {
  res.redirect('/');
};

module.exports = authController;
var express = require('express');
var authControllers = require('./auth-controller');
var auth = require('./index');
var authRouter = express.Router();

// Local
authRouter.use('/login/callback/local', auth.authenticate('local'), function (req, res) {
  res.redirect('/');
});
authRouter.post('/login/local', auth.authenticate('local'));

// All
authRouter.use('/user', authControllers.getUser);
authRouter.use('/logout', authControllers.logout);

module.exports = authRouter;
var config = require('config');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var r = require('../db');

passport.serializeUser(function (user, done) {
  return done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  r
    .table('Users')
    .get(id)
    .run(r.conn)
    .then(function (user) {
      done(null, user);
    });
});

var loginCallbackHandler = function (objectMapper) {
  return function (accessToken, refreshToken, profile, done) {
    if (accessToken !== null) {
      r
        .table('Users')
        .getAll(profile.username, { index: 'username' })
        .run(r.conn)
        .then(function (cursor) {
          return cursor.toArray()
            .then(function (users) {
              if (users.length > 0) {
                return done(null, users[0]);
              }
              return r.table('Users')
                .insert(objectMapper(profile))
                .run(r.conn)
                .then(function (response) {
                  return r.table('Users')
                    .get(response.generated_keys[0])
                    .run(r.conn);
                })
                .then(function (newUser) {
                  done(null, newUser);
                });
            });
        })
        .catch(function (err) {
          console.log('Error Getting User', err);
        });
    }
  };
};

var callbackURL = 'http://' + config.get('url') + ':' + config.get('ports').http + '/auth/login/callback/login';

// Local
passport.use(new LocalStrategy({
    callbackURL: callbackURL
  },
  loginCallbackHandler(
    function (profile) {
      return {
        'username': profile.username,
        'password': profile.password
      };
    }
  )
));

passport.checkIfLoggedIn = function (req, res, next) {
  if (req.user) {
    return next();
  }
  return res.status(401).send('You\'re not logged in');
};

module.exports = passport;
var r = require('rethinkdb');
require('rethinkdb-init')(r);
var config = require('config');

r.connections = [];
r.getNewConnection = function () {
  return r.connect(config.get('rethinkdb'))
    .then(function (conn) {
      conn.use(config.get('rethinkdb').db);
      r.connections.push(conn);
      return conn;
    });
};

r.init(config.get('rethinkdb'), [
  {
    name: 'Users',
    indexes: ['username']
  }
]).then(function (conn) {
  r.conn = conn;
  r.connections.push(conn);
  r.conn.use(config.get('rethinkdb').db);
});

module.exports = r;
var config = require('config');
var express = require('express');
var session = require('express-session');
var engines = require('consolidate');

var app = express();
var auth = require('./auth');
var authRouter = require('./auth/auth-router');

// Middleware
app
  .use(session({
    secret: '#########',
    resave: false,
    saveUninitialized: true
  }))
  .use(auth.initialize())
  .use(auth.session());

// Views
app
  .set('views', __dirname + '/views')
  .engine('html', engines.mustache)
  .set('view engine', 'html');

// Routes
app
  .use('/auth', authRouter)
  .get('/', function (req, res) {
    res.render('index.html', { user: req.user });
  })
  .use(express.static(__dirname + '/../client'))
  .use('*', function (req, res) {
    res.status(404).send('404 Not Found').end();
  });

app.listen(config.get('ports').http);
auth/auth router.js

var authController = {};

authController.getUser = function (req, res) {
  if (req.user && req.user.id) {
    res.json(req.user);
    return;
  }
  res.status(400).json(null);
};
authController.logout = function (req, res) {
  req.logout();
  res.redirect('/');
};

authController.login = function (req, res) {
  res.redirect('/');
};

module.exports = authController;
var express = require('express');
var authControllers = require('./auth-controller');
var auth = require('./index');
var authRouter = express.Router();

// Local
authRouter.use('/login/callback/local', auth.authenticate('local'), function (req, res) {
  res.redirect('/');
});
authRouter.post('/login/local', auth.authenticate('local'));

// All
authRouter.use('/user', authControllers.getUser);
authRouter.use('/logout', authControllers.logout);

module.exports = authRouter;
var config = require('config');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var r = require('../db');

passport.serializeUser(function (user, done) {
  return done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  r
    .table('Users')
    .get(id)
    .run(r.conn)
    .then(function (user) {
      done(null, user);
    });
});

var loginCallbackHandler = function (objectMapper) {
  return function (accessToken, refreshToken, profile, done) {
    if (accessToken !== null) {
      r
        .table('Users')
        .getAll(profile.username, { index: 'username' })
        .run(r.conn)
        .then(function (cursor) {
          return cursor.toArray()
            .then(function (users) {
              if (users.length > 0) {
                return done(null, users[0]);
              }
              return r.table('Users')
                .insert(objectMapper(profile))
                .run(r.conn)
                .then(function (response) {
                  return r.table('Users')
                    .get(response.generated_keys[0])
                    .run(r.conn);
                })
                .then(function (newUser) {
                  done(null, newUser);
                });
            });
        })
        .catch(function (err) {
          console.log('Error Getting User', err);
        });
    }
  };
};

var callbackURL = 'http://' + config.get('url') + ':' + config.get('ports').http + '/auth/login/callback/login';

// Local
passport.use(new LocalStrategy({
    callbackURL: callbackURL
  },
  loginCallbackHandler(
    function (profile) {
      return {
        'username': profile.username,
        'password': profile.password
      };
    }
  )
));

passport.checkIfLoggedIn = function (req, res, next) {
  if (req.user) {
    return next();
  }
  return res.status(401).send('You\'re not logged in');
};

module.exports = passport;
var r = require('rethinkdb');
require('rethinkdb-init')(r);
var config = require('config');

r.connections = [];
r.getNewConnection = function () {
  return r.connect(config.get('rethinkdb'))
    .then(function (conn) {
      conn.use(config.get('rethinkdb').db);
      r.connections.push(conn);
      return conn;
    });
};

r.init(config.get('rethinkdb'), [
  {
    name: 'Users',
    indexes: ['username']
  }
]).then(function (conn) {
  r.conn = conn;
  r.connections.push(conn);
  r.conn.use(config.get('rethinkdb').db);
});

module.exports = r;
var config = require('config');
var express = require('express');
var session = require('express-session');
var engines = require('consolidate');

var app = express();
var auth = require('./auth');
var authRouter = require('./auth/auth-router');

// Middleware
app
  .use(session({
    secret: '#########',
    resave: false,
    saveUninitialized: true
  }))
  .use(auth.initialize())
  .use(auth.session());

// Views
app
  .set('views', __dirname + '/views')
  .engine('html', engines.mustache)
  .set('view engine', 'html');

// Routes
app
  .use('/auth', authRouter)
  .get('/', function (req, res) {
    res.render('index.html', { user: req.user });
  })
  .use(express.static(__dirname + '/../client'))
  .use('*', function (req, res) {
    res.status(404).send('404 Not Found').end();
  });

app.listen(config.get('ports').http);
auth/index.js

var authController = {};

authController.getUser = function (req, res) {
  if (req.user && req.user.id) {
    res.json(req.user);
    return;
  }
  res.status(400).json(null);
};
authController.logout = function (req, res) {
  req.logout();
  res.redirect('/');
};

authController.login = function (req, res) {
  res.redirect('/');
};

module.exports = authController;
var express = require('express');
var authControllers = require('./auth-controller');
var auth = require('./index');
var authRouter = express.Router();

// Local
authRouter.use('/login/callback/local', auth.authenticate('local'), function (req, res) {
  res.redirect('/');
});
authRouter.post('/login/local', auth.authenticate('local'));

// All
authRouter.use('/user', authControllers.getUser);
authRouter.use('/logout', authControllers.logout);

module.exports = authRouter;
var config = require('config');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var r = require('../db');

passport.serializeUser(function (user, done) {
  return done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  r
    .table('Users')
    .get(id)
    .run(r.conn)
    .then(function (user) {
      done(null, user);
    });
});

var loginCallbackHandler = function (objectMapper) {
  return function (accessToken, refreshToken, profile, done) {
    if (accessToken !== null) {
      r
        .table('Users')
        .getAll(profile.username, { index: 'username' })
        .run(r.conn)
        .then(function (cursor) {
          return cursor.toArray()
            .then(function (users) {
              if (users.length > 0) {
                return done(null, users[0]);
              }
              return r.table('Users')
                .insert(objectMapper(profile))
                .run(r.conn)
                .then(function (response) {
                  return r.table('Users')
                    .get(response.generated_keys[0])
                    .run(r.conn);
                })
                .then(function (newUser) {
                  done(null, newUser);
                });
            });
        })
        .catch(function (err) {
          console.log('Error Getting User', err);
        });
    }
  };
};

var callbackURL = 'http://' + config.get('url') + ':' + config.get('ports').http + '/auth/login/callback/login';

// Local
passport.use(new LocalStrategy({
    callbackURL: callbackURL
  },
  loginCallbackHandler(
    function (profile) {
      return {
        'username': profile.username,
        'password': profile.password
      };
    }
  )
));

passport.checkIfLoggedIn = function (req, res, next) {
  if (req.user) {
    return next();
  }
  return res.status(401).send('You\'re not logged in');
};

module.exports = passport;
var r = require('rethinkdb');
require('rethinkdb-init')(r);
var config = require('config');

r.connections = [];
r.getNewConnection = function () {
  return r.connect(config.get('rethinkdb'))
    .then(function (conn) {
      conn.use(config.get('rethinkdb').db);
      r.connections.push(conn);
      return conn;
    });
};

r.init(config.get('rethinkdb'), [
  {
    name: 'Users',
    indexes: ['username']
  }
]).then(function (conn) {
  r.conn = conn;
  r.connections.push(conn);
  r.conn.use(config.get('rethinkdb').db);
});

module.exports = r;
var config = require('config');
var express = require('express');
var session = require('express-session');
var engines = require('consolidate');

var app = express();
var auth = require('./auth');
var authRouter = require('./auth/auth-router');

// Middleware
app
  .use(session({
    secret: '#########',
    resave: false,
    saveUninitialized: true
  }))
  .use(auth.initialize())
  .use(auth.session());

// Views
app
  .set('views', __dirname + '/views')
  .engine('html', engines.mustache)
  .set('view engine', 'html');

// Routes
app
  .use('/auth', authRouter)
  .get('/', function (req, res) {
    res.render('index.html', { user: req.user });
  })
  .use(express.static(__dirname + '/../client'))
  .use('*', function (req, res) {
    res.status(404).send('404 Not Found').end();
  });

app.listen(config.get('ports').http);
db/index.js

var authController = {};

authController.getUser = function (req, res) {
  if (req.user && req.user.id) {
    res.json(req.user);
    return;
  }
  res.status(400).json(null);
};
authController.logout = function (req, res) {
  req.logout();
  res.redirect('/');
};

authController.login = function (req, res) {
  res.redirect('/');
};

module.exports = authController;
var express = require('express');
var authControllers = require('./auth-controller');
var auth = require('./index');
var authRouter = express.Router();

// Local
authRouter.use('/login/callback/local', auth.authenticate('local'), function (req, res) {
  res.redirect('/');
});
authRouter.post('/login/local', auth.authenticate('local'));

// All
authRouter.use('/user', authControllers.getUser);
authRouter.use('/logout', authControllers.logout);

module.exports = authRouter;
var config = require('config');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var r = require('../db');

passport.serializeUser(function (user, done) {
  return done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  r
    .table('Users')
    .get(id)
    .run(r.conn)
    .then(function (user) {
      done(null, user);
    });
});

var loginCallbackHandler = function (objectMapper) {
  return function (accessToken, refreshToken, profile, done) {
    if (accessToken !== null) {
      r
        .table('Users')
        .getAll(profile.username, { index: 'username' })
        .run(r.conn)
        .then(function (cursor) {
          return cursor.toArray()
            .then(function (users) {
              if (users.length > 0) {
                return done(null, users[0]);
              }
              return r.table('Users')
                .insert(objectMapper(profile))
                .run(r.conn)
                .then(function (response) {
                  return r.table('Users')
                    .get(response.generated_keys[0])
                    .run(r.conn);
                })
                .then(function (newUser) {
                  done(null, newUser);
                });
            });
        })
        .catch(function (err) {
          console.log('Error Getting User', err);
        });
    }
  };
};

var callbackURL = 'http://' + config.get('url') + ':' + config.get('ports').http + '/auth/login/callback/login';

// Local
passport.use(new LocalStrategy({
    callbackURL: callbackURL
  },
  loginCallbackHandler(
    function (profile) {
      return {
        'username': profile.username,
        'password': profile.password
      };
    }
  )
));

passport.checkIfLoggedIn = function (req, res, next) {
  if (req.user) {
    return next();
  }
  return res.status(401).send('You\'re not logged in');
};

module.exports = passport;
var r = require('rethinkdb');
require('rethinkdb-init')(r);
var config = require('config');

r.connections = [];
r.getNewConnection = function () {
  return r.connect(config.get('rethinkdb'))
    .then(function (conn) {
      conn.use(config.get('rethinkdb').db);
      r.connections.push(conn);
      return conn;
    });
};

r.init(config.get('rethinkdb'), [
  {
    name: 'Users',
    indexes: ['username']
  }
]).then(function (conn) {
  r.conn = conn;
  r.connections.push(conn);
  r.conn.use(config.get('rethinkdb').db);
});

module.exports = r;
var config = require('config');
var express = require('express');
var session = require('express-session');
var engines = require('consolidate');

var app = express();
var auth = require('./auth');
var authRouter = require('./auth/auth-router');

// Middleware
app
  .use(session({
    secret: '#########',
    resave: false,
    saveUninitialized: true
  }))
  .use(auth.initialize())
  .use(auth.session());

// Views
app
  .set('views', __dirname + '/views')
  .engine('html', engines.mustache)
  .set('view engine', 'html');

// Routes
app
  .use('/auth', authRouter)
  .get('/', function (req, res) {
    res.render('index.html', { user: req.user });
  })
  .use(express.static(__dirname + '/../client'))
  .use('*', function (req, res) {
    res.status(404).send('404 Not Found').end();
  });

app.listen(config.get('ports').http);
视图/index.html

<body>
  <h1>Passport/RethinkDB Example</h1>
{{#user}}
  <img style='width: 100px; height: 100px;' src='{{ avatarUrl }}'>
  <p>You are logged in as <span style="font-weight: bold;">{{ login }}</span>. Account created through <span style="font-weight: bold;">{{ type }}</span>.</p>
  <a href='/auth/user'>See user data</a>
  </br>
  <a href='/auth/logout'>Logout</a>
{{/user}}
{{^user}}
  <p>You are not logged in.</p>

  <form action="/auth/login/local" method="post">
    Username: <input type="text" name="username" value="sam"><br>
    Password: <input type="text" name="password" value="123"><br>
    <input type="submit" value="Submit">
</form>
{{/user}}
</body>
我做了什么导致了错误请求的问题,有没有简单的方法来调试这个问题


当我从表单中提交用户名和密码时,出现错误请求。。。这是一个url,我相信它发生在../auth/login/local

您没有显示服务器代码。我曾经遇到过类似的问题,这是因为我的bodyparser没有在服务器中设置:

const bodyParser=require('body-parser');
app.use(bodyParser.json())
use(bodyParser.urlencoded({extended:true}))


或者类似的。POST请求通过正文发送信息。如果这不起作用,最好能看到您的服务器代码。

错误请求发生在哪里?
/auth/login/local
不存在。如果路由不存在,我会看到“404未找到”。我已经使用url“./login/local”对此进行了测试,该url返回“404notfound”