我目前正在尝试构建一个应用程序,需要用户通过CAS(Centrale身份验证服务)进行身份验证才能使用它。我使用Angular 5作为前端,Node.js作为后端。
要在服务器端验证用户,我正在使用名为“r-cas-authentication”的模块,该模块在用户通过身份验证时创建快速会话。事实上,如果用户经过身份验证,我不知道如何检查Angular端,否则将他重定向到CAS身份验证页面。
你知道我怎么做吗? 谢谢!
答案 0 :(得分:0)
您无需在angular
方面处理此问题。只需让Node服务器将未经身份验证的用户重定向到登录页面。浏览器设置会话标头,您的节点服务器将看到没有身份验证并发送重定向。 r-cas-authentication
模块提到了文档中的bounce
和bounce_redirect
选项,这将进一步简化流程。
您的节点实例将提供登录页面。:
app.get('/login', (req, res) => res.sendFile('path/to/login.html'));
此外,您的资产(前端脚本,CSS,图像等)(通常)可以自由拥有:
app.get('/assets', express.static(pathToStaticDirectory));
此外,您还拥有身份验证终结点:
app.get( '/authenticate', cas.bounce_redirect );
接下来,它需要提供Angular应用程序。但是,它需要 cas session 。我们定位'/home'
,但它可以是另一条路径,例如'/'或任何有你的路径。
app.get('/home', cas.bounce, express.static(pathToAngularAppDirectory);
最后,您可能会拥有要保护的REST API端点:
app.use('/api', cas.block, appRoutes);
现在,发生了什么。请求来自浏览器。它命中'/home'
路线。由于浏览器是首次访问,因此没有设置身份验证标头。它将点击cas.bounce()
块并重定向到/login
路由。一旦它到达那里,它将被提供login.html *。
您在此处输入登录数据并点击“登录”按钮 - 页面将被提交,cas
中间件对用户进行身份验证 - 将会话数据和所有内容设置为浏览器。浏览器会用它来解决这些问题(注意我说的是浏览器,而不是Angular)。 它还会将用户重定向回“/ home”页面。
现在您的浏览器已会话信息,因此它会获得路由传递,获取Angular文件,应用程序正常启动。一切都很酷。
还有一个案例你可能想从Angular处理。
假设您的会话已过期。浏览器保持打开状态。用户重新访问该页面 - 一切都很酷,cas.bounce
会将用户重定向回登录表单。
但是如果用户只是点击你应用中的“刷新”怎么办?然后Angular的HttpClient
获得401响应(根据节点模块docs)。您可以使用简单的http interceptor来执行window.location.reload()
或类似的操作(基本上是整页重新加载,而不是客户端导航),并且在页面重新加载时,您的应用会陷入cas.bounce
因为它试图重新加载/未经验证的家。