我正在尝试将登录信息从表单通过angular传递到后端表达端点。正在进行身份验证的护照中间件每次都会失败并进入故障重定向。麻烦的是,我无法通过文档找到它所期望的POST参数,或者它们正在做什么。这是我正在使用的策略的失败(通过userapp.io插件)还是实际的用户名/密码错误?
登录端点如下所示:
router.post('/login', passport.authenticate('userapp', {
failureRedirect: '#/login',
failureFlash: 'Invalid username or password',
successFlash: 'Welcome!' }),
function (req, res) {
res.cookie(SESSION_TOKEN, req.user.token);
res.redirect('/');
});
(请注意,这最终会连接到/auth/login
,与下面的帖子操作匹配)
提交到该端点的表单如下所示:
<form method='post' action='/auth/login'>
<input name="login" placeholder="Username"><br>
<input name="password" placeholder="Password" type="password"><br>
<p><button type="submit">Log in</button></p>
<p ng-show="loading"><img src="https://app.userapp.io/img/ajax-loader-transparent.gif"></p>
<p ng-show="error">{{ error.message }}</p>
</form>
这是否正确地将数据提交给端点,如何进一步调试正在发生的事情?现在观察到的行为只是登录失败,用户最终在failureRedirect。
我知道的另一个选项是使用ua-login
指令shown in this example而不是我自己的表单。麻烦的是,似乎有一些无证的配置魔法;使用ua-login
指令导致客户端尝试发布到不存在的URL。现有教程似乎没有说明使ua-login
工作所需的配置。
答案 0 :(得分:1)
您可以更改定义策略的默认参数(username
和password
)。
根据docs:
passport.use(new LocalStrategy({ // or whatever you want to use
usernameField: 'login', // define the parameter in req.body that passport can use as username and password
passwordField: 'password'
},
function(username, password, done) { // depending on your strategy, you might not need this function ...
// ...
}
));
对于您提到的(userapp)特定策略,我查看了源代码。您可以找到这些值here。如果不存在usernameField
或passwordField
,则会使用默认值(username
和password
)。