我正在尝试在(在API中)检测到用户不再登录后重定向用户。 例如,用户启动对api的操作(PUT),api检查用户状态,如果登录,则执行操作并返回数据。如果没有,则需要将用户重定向到登录页面,在Angular5路由器中定义loginroute(/ login)。
这很好用,如果登录,一切都很好。
如果没有登录,则会检测到并记录,但重定向不起作用,首先它尝试使用PUT on / login导致404,这样做起作用所以我添加了303,现在它已经/登录了。但是......在我的浏览器控制台中,我得到了......
SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttpRequest.onLoad ( etc
不知怎的,似乎它试图将页面解析为JSON ??? 这里发生了什么?我希望有人可以给我一个提示,以便我可以转到此页面,如果有人没有登录:)
一些代码(使用Angular 5)......
在node / express / passport中,有一小部分中间件可以检查状态......
function isTeacher(req, res, next) {
if (req.isAuthenticated() && (req.user.google.role=="teacher" || req.user.google.role=="admin") )
return next();
console.log("Not loggedin");
res.redirect(303, '/login');
};
在路由器......
const appRoutes: Routes = [
{ path: '', redirectTo: '/login', pathMatch: 'full'},
{ path: 'login', component: LoginComponent},
{ path: 'studentlists', component: ListselectorComponent},
{ path: 'studentlisteditor/:listid', component: StudentlisteditorComponent},
{ path: 'teacherlists', component: TeacherlistselectorComponent},
{ path: 'teacherlisteditor/:listid',
component: TeacherlisteditorComponent,
children: [
{path: 'results', component: TeacherresultsComponent },
{path: 'edit', component: ListeditorComponent },
]
},
];
(我是一个真正的初学者,所以在我的代码中可能有更多奇怪的东西......对不起,欢迎所有输入;)
答案 0 :(得分:0)
我的建议是避免后端重定向并从前端执行,我会做什么:在你的isTeacher方法中,如果不允许用户返回一个响应,表明它无效,然后在你的Angular中应用程序使用路由警卫来检查此答案,如果不是预期的话,则重定向到登录。 Angular official docs about route guards