2

我目前正在使用React,Redux,Express和Node添加登錄以及與登錄相關的一組高級功能。對於實際的登錄,我使用Passport,使用Facebook,Google和Twitter策略。獲取必需的令牌後,將其發送到AWS Cognito聯合身份標識以獲取用戶的同步數據。來自網站的數據也會在需要時同步回Cognito。同構應用程序中的用戶配置文件

用戶登錄後,我可以構建節點服務器上的完整的用戶配置文件,但現在該怎麼辦?

// server.jsx 
// imports 
............. 

// variables 
............. 

var userProfile; 
// logging the user with Passport and adding it to the profile 
............. 

app.use((req, res) => { 
    // I can do whatever I want with the profile here 
    ............. 

    // handling the request and creating an initial state .. 
    ............. 
} 

早在天,這將是非常容易使用任何會話變量(Java/C#)或餅乾(JS)來解決,但在同構的應用它不是那麼簡單。假設用戶在登錄後通過路由訪問profile.jsx:一個cookie(例如通過客戶端會話設置)僅在客戶端上運行jsx文件時纔可用;它在服務器呈現時無法訪問。

自定義代碼出現到使用像同構,餅乾或一般的cookie,它幾乎擊敗同構應用的目的,即使是必需的。我也想過使用Redux,但Redux似乎只在Node上有一個初始狀態,這沒有多大幫助。

// Profile.jsx 
import React , { Component } from 'react'; 
import Cookies from 'universal-cookie'; 

class Profile extends Component { 
    // Stuff 
    ............. 

    render() { 
     // Would love to be able to access to the profile without custom code like this 
     if (typeof window != 'undefined' && window.document) { 
      const cookies = new Cookies(); 
      console.log(cookies.get('user')); 
     } 
    } 

那麼,有沒有處理用戶配置文件,或者你想在任何時候訪問其他變量,而無需編寫大量的自定義代碼量每個方案順利呢?看起來大多數教程和示例都只是在服務器或客戶端上處理這類事情,在這種情況下需要重寫網站。

同構的應用是相當簡單的在大多數情況下,但真正的複雜性通過屋頂射擊在引入認證,型材等,所以我非常感謝對此事的任何反饋。

+0

有支持同構的應用程序的框架,據我所知快遞不是其中之一 – niceman

+0

你可以看看meteor.js寫這樣的應用程序(它可以與反應) – niceman

+0

該網站已在生產,已經有一年了。這是一個基於快速/節點的同構應用程序,所以我不確定我明白你的意思..? – MortenTZ

回答

0

我覺得這裏常見的場景將添加一個驗證步驟,然後存儲一個成功的驗證令牌無論是作爲一個cookie或在您提供回輪廓API在後續查詢您的應用程序的狀態。

時返回形成你的API還可以添加到您的Redux的商店,讓你隨時可以訪問它,然後當你需要堅持改變或要強制更新當前狀態數據更新任何數據。

+0

權,我們已經令牌,存儲在cookie中(護照 - > Client-Sessions - >存儲在名爲「user」的cookie中)。此cookie隨每個請求一起發送,因此後端始終可以訪問它。 – MortenTZ

+0

我基本上想要做的是訪問基於會話的數據在各種jsx文件沒有自定義代碼(客戶端vs服務器)。 Redux商店可能是一個選項,因爲我們已經使用needs = [];從API獲取數據,但這種情況不同,因爲我必須將令牌傳遞給操作,然後從操作訪問Cognito。 這仍然給我帶來了以同構方式閱讀和傳遞令牌的問題。有任何想法嗎?或者也許想法採用不同的方法? – MortenTZ