2016-05-12 17 views
3

ログインした(許可されている)後に、jwt-tokenをnodejsを介してローカルストレージに保存する必要があります。nodejsでローカルストレージに保存

コントローラでユーザー/パスワードが正しいことを確認した後、生成されたトークンをローカルストレージに保存します。それが存在するので、私は窓を参照することはできません。

ReferenceError: window is not defined 

これは私が現在行っている方法です。

... 
     payload = { 
     sub: user.email, 
     role: user.role 
     }; 

     token = jwt.sign(payload, jwtSecretKey, {expiresIn: '60m'}); 

     window.localStorage.setItem('token', token); 

     res.status(200).render('index' , { 
     user: user, 
     token: token 
     }); 
... 
+3

クライアントとサーバーの違いは分かりますか? – Amit

+0

はい、私は..... – Paran0a

+0

だから...なぜあなたはサーバー上でクライアントのものをやろうとしているのですか? – Amit

答えて

1

html 5 localStorageの場合、node.jsはサーバー側のテクノロジなので、このようなことはありません。クライアント側の機能が

は、あなたがあなたから参照できるwindowを目的としているクライアント(ブラウザ)にサーバー(Node.jsの上で実行されている)からトークンを送信する必要がありますHow to access localStorage in node.js?

+0

ええ、私はそのストレージについて話しています。私は、生成されたトークンをクッキーまたはローカルストレージに保存することを推奨するチュートリアルはほとんど見ていません。だから私がノードからそれを保存したいのであれば、私はクッキーを使うべきですか? – Paran0a

+0

はい、同じものにクッキーを使用できます –

+0

クッキーまたはjsonレスポンスを使用できます。 –

3

を参照してくださいHTML 5のlocalStorageをサポートされていますJavaScriptコード。 Node.jsにはwindowがありません。したがって、Node.jsコードで参照すると、遭遇したエラーundefinedが発生します。

クッキーに入れて送信するか、jsonレスポンスで送信してください。その後、クライアントブラウザでwindow.localStorageに保存します。

以下は、後者の方法のコード例です。応答を経由して送信:

// Server-Side Code 
// say app is your app server on node.js 
// this is a url handler on your server-side code 
// you just have sent your user credentials from a browser 
// typically via form in the body of your http request 
app.post('/auth', function (req, res) { 
    // you may have here some jwt token creation things 
    // ... 
    // and send it as your response to the client (probably a web browser) .. 
    // with your prefrred name as the key, say 'my_token', .. 
    // where you will save it to localStorage (ie. window.localStorage) 
    res.json({my_token: 'asdfgh-anything-jw-token-qwerty'}) 
}) 

// Client-Side Code (may be a web browser) 
// You have jsut sent a request to the server with user credentials for authentication in the request body 
// in the request body may be a window.FormData object or a json etc. 
http.post('auth', userCredentials) 
    // probably the request mechanism you make http requests asynchronously, a library in most cases, .. 
    // will return a Promise, and you will have a similar chain ad signature from now below 
    .then(response => { 
    response.json() 
     .then(responseJson => { 
     // set localStorage with your preferred name, say 'my_token', and the value sent by server 
     window.localStorage.setItem('my_token', responseJson.my_token) 
     // you may also want to redirect after you have saved localStorage 
     // window.location.assign("http://www.example.org") 
     }) 
    }) 
+0

こんにちは、あなたはどのようにJSONレスポンス – Kannan

+0

はここ[例として、フィドル]これを使用(https://jsfiddle.net/n80mo7bc/)を介して送るのが私の例を与えることができ、あなたはいつも戻って、私がいることを考え出し –

+0

こんにちは仲間を求めることができますこのヘルプのおかげで前に出てきましたが、ページをリダイレクトするのに苦労しています。 – Kannan

0

を/ログイン利用xmlhttpresponseオブジェクトへのクライアントの呼び出しでは、その後、「ロード」のイベントリスナーを追加します。これにより、トークンを追加したクライアントにresponseObjectが与えられます。次にイベントリスナーでlocalStorageコードを入力して

関連する問題