Node.js 如何制作角度5+;具有CAS身份验证的节点应用程序?

Node.js 如何制作角度5+;具有CAS身份验证的节点应用程序?,node.js,angular,authentication,cas,Node.js,Angular,Authentication,Cas,我目前正在尝试构建一个需要用户通过CAS(Centrale认证服务)认证才能使用的应用程序。我使用Angular 5作为前端,Node.js作为后端 为了在服务器端对用户进行身份验证,我使用了一个名为“r-cas-authentication”的模块,该模块在对用户进行身份验证时创建一个快速会话。事实上,我不知道如何从角度检查用户是否经过身份验证,或者在CAS身份验证页面上重定向他 你知道我怎么做吗? 谢谢 您不需要在角度方面处理此问题。只需让节点服务器始终将未经身份验证的用户重定向到登录页面即

我目前正在尝试构建一个需要用户通过CAS(Centrale认证服务)认证才能使用的应用程序。我使用Angular 5作为前端,Node.js作为后端

为了在服务器端对用户进行身份验证,我使用了一个名为“r-cas-authentication”的模块,该模块在对用户进行身份验证时创建一个快速会话。事实上,我不知道如何从角度检查用户是否经过身份验证,或者在CAS身份验证页面上重定向他

你知道我怎么做吗?
谢谢

您不需要在
角度方面处理此问题。只需让节点服务器始终将未经身份验证的用户重定向到登录页面即可。浏览器设置会话头,节点服务器将看到没有身份验证并发送重定向。
r-cas-authentication
模块在文档中提到了
bounce
bounce\u 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会话。我们的目标是
“/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开始处理

假设您的会话已过期。浏览器还是开着的什么的。用户重新访问该页面-一切都很酷,
cas.bounce
会将用户重定向回登录表单


但是,如果用户只是在你的应用程序中点击“刷新”怎么办?然后Angular的HttpClient得到401响应(根据节点模块文档)。你可以使用一个简单的工具来执行
window.location.reload()
或类似操作(基本上是一个完整的页面重新加载,而不是客户端导航),在页面重新加载时,你的应用程序会陷入
cas.bounce
,因为它试图在未经身份验证的情况下重新加载/返回。

谢谢你的快速回答。但我很抱歉我不明白。如果我从客户端调用服务器,它将需要将我重定向到另一台服务器上运行的CAS登录页面,来自angular的http请求将不正确。因此,重定向需要来自角度,如果我做得很好,服务器会验证用户,但当用户重定向到源页面时,会话会丢失。这与角度本身无关,只是浏览器机制。我将扩展答案以尝试解释。感谢您的扩展答案,我做到了这一点,它工作得非常完美!