Passport 中间件预期参数
Passport middleware expected parameters
我正在尝试通过 angular 将登录信息从表单传递到后端 express 端点。进行身份验证的护照中间件每次都失败并转到失败重定向。问题是我无法通过文档找到它期望的 POST 参数,或者它对它们做了什么。这是我使用的策略的失败(通过 userapp.io 的插件)还是实际的 username/password 错误?
登录端点如下所示:
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
,这与下面的 post 操作匹配)
提交到该端点的表单如下所示:
<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>
这是否正确地将数据提交到端点,我该如何进一步调试正在发生的事情?现在观察到的行为只是登录失败,用户最终在失败重定向。
我知道的另一个选择是使用 ua-login
指令 shown in this example 而不是我自己的表单。问题在于似乎有一些未记录的配置魔法;使用 ua-login
指令会导致客户端尝试 post 到不存在的 URL。现有教程似乎没有说明使 ua-login
工作所需的配置。
您可以更改定义策略的默认参数(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
)。
我正在尝试通过 angular 将登录信息从表单传递到后端 express 端点。进行身份验证的护照中间件每次都失败并转到失败重定向。问题是我无法通过文档找到它期望的 POST 参数,或者它对它们做了什么。这是我使用的策略的失败(通过 userapp.io 的插件)还是实际的 username/password 错误?
登录端点如下所示:
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
,这与下面的 post 操作匹配)
提交到该端点的表单如下所示:
<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>
这是否正确地将数据提交到端点,我该如何进一步调试正在发生的事情?现在观察到的行为只是登录失败,用户最终在失败重定向。
我知道的另一个选择是使用 ua-login
指令 shown in this example 而不是我自己的表单。问题在于似乎有一些未记录的配置魔法;使用 ua-login
指令会导致客户端尝试 post 到不存在的 URL。现有教程似乎没有说明使 ua-login
工作所需的配置。
您可以更改定义策略的默认参数(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
)。