我有一个node express app,使用express-stormpath进行身份验证/授权 我有一个GET路由,使用某些jquery参数调用。 如果用户已登录,则所有内容均按预期工作。 如果不是,则显示用户登录屏幕。 在进行stormpath身份验证和授权后,我的查询参数将丢失。 有没有办法保留这些?
app.get('/myRoute', stormpath.groupsRequired(['admin']), function(req, res){
console.log('req.query ',req.query);
//do somehting with the query data
res.sendStatus(200);
});
验证后, req.query为{}
。
有什么想法吗?
答案 0 :(得分:0)
我认为stormpath不会从请求中删除查询。
但是我们可以通过在stormpath初始化之前添加middlewhare来检查它:
var express = require('express');
var stormpath = require('express-stormpath');
var app = express();
// binding middleware to assign req.query to req.q param
app.use(function(req, res, next) {
req.QUERY = req.query;
next();
});
function restoreQuery(req, res, next) {
req.query = req.QUERY;
next();
}
app.use(stormpath.init(app, {
// Optional configuration options.
}));
app.get('/myRoute',
stormpath.groupsRequired(['admin']),
restoreQuery,
function(req, res){
console.log('req.query ',req.query);
//do somehting with the query data
res.sendStatus(200);
});
答案 1 :(得分:0)
感谢您提出问题,我在Stormpath工作,我非常乐意为您提供帮助。我们的express-stormpath图书馆是开源的,我们一直很乐意修复错误并审核拉取请求。
您能告诉我您使用的是哪个版本的库吗?目前我无法重现你所看到的问题。这是我与最新版本3.0.1一起放的一个简单示例:
'use strict';
var express = require('express');
var stormpath = require('express-stormpath');
var app = express();
var port = process.env.PORT || 3000;
app.use(stormpath.init(app));
app.get('/admins', stormpath.groupsRequired(['admins']), function(req, res){
res.json(req.query);
});
app.on('stormpath.ready',function () {
console.log('Stormpath Ready');
});
app.listen(port, function () {
console.log('Server listening on http://localhost:' + port);
});
通过这个例子,我做了以下几点:
1。)断言我没有登录,删除了localhost的所有cookie。
2。)在网址栏中输入/admin?foo=bar
。
3。)我被重定向到登录页面。
4.。)我使用有效凭据登录。
5.)我按预期重定向到/admins?foo=bar
,我在页面正文中看到req.query
对象。仅当用户在admins
组中时才会出现这种情况,如果用户不在,我会看到"未授权"错误消息页面。
您能否将我的步骤和示例与您的应用进行比较,如果有任何差异,请告诉我们?谢谢!