- 理想行为**
我有一个使用Azure AD B2C登录的Node. js/Express应用程序。
我想返回从服务器端返回的值,OAuth样式,登录浏览器并将它们保存在浏览器cookie中(使用js-cookie)。
我希望这样做,以便可以在各种UI功能中使用这些值。
但是,目前唯一返回到浏览器的是通过res. render()(使用simple template engine):
res.render('index', { page_html: my_page_html, some_other_value: 'hello' });
实际上,res.render
向浏览器返回一个html文件,其中包含占位符值,这些值将被传递到res.render
的变量替换。
是否可以在浏览器中设置一个事件侦听器来捕获从res.render
返回的值?
或者,如果这不可能,是否有其他方法可以将值"推送"到前端(与res.render
并行),以便由前端代码处理?
- 背景**
以前,在其他项目中,我从前端向后端发出Ajax请求,因此可以轻松地访问从服务器返回的内容,然后可以在响应处理程序逻辑中使用这些内容,并保存在浏览器cookie等文件中。
但是,在这个示例中,我从后端代码执行所有登录逻辑,因此没有从前端到后端的特定请求,前端中也没有响应处理程序。
所以我不确定如何将后端(登录后)接收到的值传递到前端。
身份验证过程遵循常见的OAuth工作流:
- 用户点击受保护端点-在这种情况下是"根"端点(即:
/
) - 用户被转发到身份提供程序进行登录(在本例中为Azure AD B2C)
- 成功登录后,用户将被转发到重定向URI,并在服务器端代码中接收授权代码
- 服务器端代码使用授权代码来请求访问令牌
- 访问令牌保存在
req.session.accessToken
中 - 在对受保护端点的后续请求中,如果存在
req.session.accessToken
,则请求可以继续
本项目不使用任何JavaScript框架(如React,Angular)。
1条答案
按热度按时间5n0oy7gb1#
您只需使用
res.render()
方法的回调函数在响应上设置一个cookie,然后在调用res.send()
之前在该方法内部调用res.cookie()
。浏览器将按预期保存cookie,然后您可以使用
js-cookie
访问该cookie。作为参考,您需要执行以下操作