关于自定义的登录机制在SAP Spartacus服务器端渲染(SSR)实施过程中遇到的问题

简介: 关于自定义的登录机制在SAP Spartacus服务器端渲染(SSR)实施过程中遇到的问题

问题背景

某客户使用了第三方的Authentication service来实现Spartacus用户的登录机制:


In our project we have integration with MDCIM team who handles login and authorization.

This part of code redirects the User to MDCIM URL and once authorization is completed by the User in MDCIM, the user will be landed back to our home page completing the login scenario.


Here our API redirect to MDCIM and waits for a token. Once response received we use the token to get the user information with another API call.


使用token,调用另一个API,获取user信息。


We found out that the problem was caused by using this.windowAdapter.getWindow().sessionStorage.* without previously checking if the sessionStorage is actually available. In SSR it was undefined.


If you wrap all the calls in an if (this.windowAdapter.getWindow().sessionStorage) {...} the PLP pages are being SSRed correctly.


As an additional, browser’s storage (sessionStorage, localStorage) API is not available in SSR, therefore code defensively.


自开发的用户认证:

customizeAuthentication(): void {

   this.customLoginAdapter

     .getMDCIMToken(this.authCode)

     .subscribe((data: AuthTokenDetails) => {

       console.log('Output from MDCIM: ', data);

       console.log(

         'Session Storage present: ',

         this.windowAdapter.getWindow().sessionStorage

       );

       if (data && data.token) {

         const userId = data?.userDetails?.email;

         const password = '';

         this.authService.authorize(userId, password);

         if (this.windowAdapter.getWindow().sessionStorage) {

           this.windowAdapter

             .getWindow()

             .sessionStorage.setItem('MDCIM-Token', JSON.stringify(data));

         }

         this.getOuthToken();

       }

     });

 }

sessionStorage和localStorage都无法在SSR模式下工作。


While using SSR the page html is generated at html. However the window, sessionStorage and localStorage objects are of the browser contextual objects. SSR at server side cannot have access to these objects.


This is the reason of SSR not working on the pages where these objects are being used.


If window or localStorage objects are required to be used with SSR then include the library @ng-toolkit/universal .


An example of using window and localStorage objects with SSR can be referred at this article


最佳实践

最好不要在SSR模式下进行用户认证(user Authentication)相关的逻辑:


In general we don’t recommend running any authentication / authorization related code in the SSR mode, unless you are aware of all the security issues and pitfall that with it. It might be a good idea to skip the whole auth logic in the SSR mode.


解决方案

I can suggest you to try to inject the @Inject(PLATFORM_ID) protected platform: any (from @angular/core) to your custom-login.component.ts, and then check if the platform is a browser or a server with isPlatformBrowser() or isPlatformServer() ( both coming from @angular/common).

if (isPlatformServer(this.platform)) {

return;

}

相关文章
|
2月前
|
搜索推荐 Java 索引
Java中的服务器端渲染(SSR)
Java中的服务器端渲染(SSR)
|
4月前
|
JavaScript 搜索推荐 前端开发
理解服务器端渲染(SSR):提高网页性能与SEO的秘籍
理解服务器端渲染(SSR):提高网页性能与SEO的秘籍
|
2月前
|
JavaScript 前端开发 搜索推荐
服务器端渲染技术SSR与ISR:深入解析与应用
【7月更文挑战第20天】服务器端渲染(SSR)和增量静态再生(ISR)作为现代Web开发中的两种重要渲染技术,各有其独特的优势和适用场景。在实际应用中,开发者应根据具体需求和条件选择合适的渲染模式。无论是追求极致的页面加载速度和SEO优化,还是实现内容的实时更新,SSR和ISR都能提供有效的解决方案。通过深入理解这些技术的工作原理和应用场景,开发者可以构建出更加高效、可靠和用户体验优异的Web应用。
|
2月前
|
安全 前端开发 Java
Java中的服务器端渲染(SSR)技术深入剖析
Java中的服务器端渲染(SSR)技术深入剖析
|
2月前
|
缓存 Java 数据库
Java中的服务器端渲染(SSR)优化与实现
Java中的服务器端渲染(SSR)优化与实现
|
2月前
|
搜索推荐 Java 索引
Java中的服务器端渲染(SSR)
Java中的服务器端渲染(SSR)
|
2月前
|
缓存 搜索推荐 Java
Java中的服务器端渲染(SSR)原理与实现
Java中的服务器端渲染(SSR)原理与实现
|
3月前
|
JavaScript Serverless 网络架构
Next.js与SSR:构建高性能服务器渲染应用
创建Next.js项目使用`create-next-app`,每个页面自动支持SSR。动态路由如`pages/posts/[id]`,在`getStaticPaths`和`getServerSideProps`中获取数据。利用静态优化和预渲染提升性能,动态导入减少初始加载时间。使用`next/image`优化图片,自定义服务器增加控制,集成第三方库如Redux。优化SEO,利用i18n支持多语言,使用Serverless模式和Web Workers。项目支持TypeScript,创建`_error.js`处理错误,部署到Vercel并使用工具进行性能监控和优化。
194 4
|
4月前
|
JavaScript 前端开发 搜索推荐
Vue 的服务器端渲染(SSR)和客户端渲染(CSR)在渲染过程、性能、用户体验等方面都存在显著的区别
【5月更文挑战第8天】Vue 的 SSR 和 CSR 在渲染上有明显差异。SSR 服务器端生成 HTML 返回给浏览器,提供更快首屏加载和更好的 SEO,但增加服务器负担。CSR 客户端渲染,首次加载可能较慢,但交互更流畅,开发更简单。两者各有优劣,需根据项目需求权衡选择。
41 2
|
4月前
|
缓存 JavaScript 前端开发
Vue的服务端渲染:Vue的服务器端渲染(SSR)技术详解
【4月更文挑战第24天】Vue的服务器端渲染(SSR)能解决SPA的首屏加载和SEO问题。SSR预渲染HTML,提升首屏速度,改善SEO,提供更好的用户体验。Nuxt.js是Vue的SSR框架,简化开发流程。但SSR增加服务器压力,开发成本高,且需处理缓存问题。选择SSR需权衡优劣。本文旨在帮助理解Vue SSR原理、优势及实践方法。

热门文章

最新文章