Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving into localStorage with nodejs

I need to save jwt-token in local-storage through nodejs after the user has logged in (has been authorized ).

After I check if the user/password is correct in my controller - I save generated token in local storage. As it stands I can't reference window as it doesn't exists.

ReferenceError: window is not defined 

This is how I'm currently trying to do it.

...
      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
      });
...
like image 516
Paran0a Avatar asked May 12 '16 09:05

Paran0a


2 Answers

You cannot save to localStorage on Node.js, but you can do it on a browser, possibly after sending from a server, for your case from a server on Node.js.

You should send the token from the server (running on Node.js) to the client (browser) which has a window object, having the localStorage and related getItem and setItem methods, you can reference from your JavaScript code for client (browser). Node.js does not have any window to reference. So, by referencing it in Node.js code is a ReferenceError hinting program code is referring to a thing that is not defined, undefined, you have encountered.

Just put it into a cookie and send, or send it via a json response. Then on the client browser save it into window.localStorage.

following is the examples code for the latter way; sending via a response:

// 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 a 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 just 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, maybe using a library,..
    // ..will return a Promise, and you will have a similar code 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")
      // you may even want to return responseJson or something else or assign it to some variable
      // return responseJson;
  })
like image 122
sçuçu Avatar answered Oct 05 '22 23:10

sçuçu


If you mean html 5 localStorage, there's no such a thing since node.js is a server-side technology. Html 5 localStorage is a client side feature supported

refer How to access localStorage in node.js?

like image 24
Hardipsinh Jadeja Avatar answered Oct 05 '22 23:10

Hardipsinh Jadeja