Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Angularjs 登录后将用户带回上一页(节点)_Angularjs_Node.js_Express - Fatal编程技术网

Angularjs 登录后将用户带回上一页(节点)

Angularjs 登录后将用户带回上一页(节点),angularjs,node.js,express,Angularjs,Node.js,Express,我希望能够将未经验证的用户从单个帖子的页面重定向到登录页面,然后在用户登录后返回帖子 我的登录路径如下: router.get('/login', function(req, res, next){ if (req.user){ res.redirect('/wall'); } else { res.render('login'); } }); router.get('/wall', function(req, res, next){

我希望能够将未经验证的用户从单个帖子的页面重定向到登录页面,然后在用户登录后返回帖子

我的登录路径如下:

router.get('/login', function(req, res, next){
    if (req.user){
        res.redirect('/wall');
    } else {
        res.render('login');
    }
});
router.get('/wall', function(req, res, next){
    res.render('wall');
});
我的墙壁路由器如下所示:

router.get('/login', function(req, res, next){
    if (req.user){
        res.redirect('/wall');
    } else {
        res.render('login');
    }
});
router.get('/wall', function(req, res, next){
    res.render('wall');
});
帖子URL类似于:

http://thisisnotarealdomain.com/wall#/post/ID
我的堆栈是:用于SPA的NodeJS和Angular

我该怎么做


谢谢,

首先,我将创建一个中间件函数,在用户未登录的情况下处理重定向,如下所示:

router.get('/login', function(req, res, next){
    if (req.user){
        res.redirect('/wall');
    } else {
        res.render('login');
    }
});
router.get('/wall', function(req, res, next){
    res.render('wall');
});
const checkLogin=(请求、恢复、下一步)=>{
//检查用户是否已登录
如果(!userIsLoggedIn){
//如果用户未登录
//获取当前url的相对路径
const url=req.originalUrl;
//并重定向到登录页面,传递
//url作为查询字符串,该字符串
//可以稍后访问吗
res.redirect(`/login/?redirect=${url}`);
}否则{
//如果用户已登录
//继续渲染页面
next();
}
}
获取('/wall',checkLogin,函数(req,res,next){
res.render(“墙”);
});
这样,如果用户没有登录,就会重定向到url,如 /login/?redirect=/wall/post/14

然后,在Angular代码中,您将等待来自节点的登录承诺,只需重定向到我们拥有的查询字符串:重定向。大概是这样的:

router.get('/login', function(req, res, next){
    if (req.user){
        res.redirect('/wall');
    } else {
        res.render('login');
    }
});
router.get('/wall', function(req, res, next){
    res.render('wall');
});
//假设您是从服务登录的
有棱角的
.service('LoginService',函数($location,$window){
//通用登录(可以是$http、$resource、restanglar)
登入承诺
.然后(功能(res){
//如果登录成功
如果(关于成功){
//$location.search()允许
//访问查询字符串的步骤
var redirectTo=$location.search().redirect;
//然后重定向到页面
//用户在被重定向之前已被删除
//转到登录页面
$window.location.href=重定向到;
}
})
})
或者,您可以直接从后端代码执行重定向:

//在您的角度代码上
$http({
方法:“GET”,
参数:{
重定向:$location.search().redirect
}
});
//在节点上
router.get('/api/login',(req,res,next)=>{
if(密码正确){
//然后执行重定向
res.redirect(请求主体重定向);
}
});
这只是实现这一点的许多方法之一(这就是web开发的美妙之处)


希望这对你有帮助

你在使用会话跟踪用户吗?是的,express’session希望这有帮助,只需稍加调整。谢谢你的朋友。我会测试一下,然后再给你回复。干杯“requ.originalUrl;”没有超过#的内容。记住,我需要SPA应用程序的完整路径,比如:在url上使用hashbang(#)绝对重要吗?如果没有,我建议您在主html上结合$locationProvider.html5Mode(true)使用类似的内容;在路由配置文件上。这样你就可以找回完整的路径。虽然没有挫败SPA的目的,这也是我无法避免的原因。这样的痛苦只是得到一个URL重定向。。。谢谢你的帮助,伙计!没问题,伙计!在尝试帮助您实现这一点时玩得很开心:)也许可以尝试使用NodeJS的URL模块中的hash函数:。这可能会奏效(希望如此)