02 - Validate Session
In this module, we'll construct a file that will check to see if the request has a token attached.
Files
Please add the following to your server in the middleware
folder:
Code
Put the following code inside of validate-session.js
. There is a little bit of code that is commented out here, leave it like that for now.
What Just Happened?
The variable
sessionToken
is created to hold the token, which is pulled from the authorization header of the request coming in.The token is printed to the console. This is purely for debugging purposes to verify that the token is being sent to the server. It should not be left in the final code, as it is a potential security vulnerability.
If no token is present, the
403 Forbidden
error is returned as the response. We have several different error handling responses in this file, so assigning each a different error code or message is a big help in debugging.No
user
property is ever provided in the request, so only tokens will get checked. This prevents unauthorized use of a token that was assigned to a different user.The
verify
method decodes the token with the provided secret, then sends a callback with two variables. If successful,decoded
will contain the decoded payload; if not,decoded
remainsundefined
.err
isnull
by default.If
decoded
has a value, the SequelizefindOne
method looks for anid
in theusers
table that matches thedecoded.id
property. This value is then passed into a callback.The callback sets the
user
value for the request as theid
value passed to it then sends the request on to its next destination. This property will be necessary later in adding to the database.If no matching
id
is found, an error message is thrown.If no value for
decoded
, an error message is thrown.
Before You Move On
Go back and read through all that again. Make a flow chart of what's happening. Explain to a partner what is going on. Do whatever you need to do in order to understand this file. This is some very deep, very detailed code that can be tough to understand. Security should be your #1, #2, and #3 priorities when coding, so it's worth the extra time to get it right.
Last updated