FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [View Raw Code]   [Original HTTPS Page]

docs/docs/nodejs-tutorial.md at master · ischyrus/docs · GitHub

/ docs Public

Latest commit

 

History

History
107 lines (74 loc) · 3.76 KB

File metadata and controls

107 lines (74 loc) · 3.76 KB

Using Auth0 with node.js

Integrating Auth0 with node is straight forward. At the end of this tutorial you will have a working web site, capable of authenticating users with an external identity provider (no more passwords in your app!).

If you are building a node based app, you are very likely using passportjs, the well known middleware for authentication. We've built a strategy for passport that makes integration even simpler. There's not really much magic there, just boilerplate code.

'Strategies' are in essence passport plugins.

##Before you start

Here's what you do for integrating Auth0 in your app with passport:

###1. Install the Auth0 strategy

npm install passport passport-auth0 --save

TIP: Don't have an app to play with? You can create one very easily with express. Run npm install express -g followed by express. That will create a simple "hello world" express website.

###2. Initialize passport-auth0

Create a new file setup-passport.js with the following code:

var passport = require('passport');
var Auth0Strategy = require('passport-auth0');

var strategy = new Auth0Strategy({  
    domain:       '@@account.namespace@@',
    clientID:     '@@account.clientId@@',
    clientSecret: '@@account.clientSecret@@',
    callbackURL:  '/callback'
  }, function(accessToken, refreshToken, profile, done) {
    //Some tracing info
    console.log('profile is', profile);
    return done(null, profile);
  });

passport.use(strategy);

// This is not a best practice, but we want to keep things simple for now
passport.serializeUser(function(user, done) {
  done(null, user); 
});

passport.deserializeUser(function(user, done) {
  done(null, user);
});

module.exports = strategy; 

TIP: you typically would put this file under a 'lib' folder

###3. Initialize passport in your app In the startup file (e.g. server.js or app.js) add:

var passport = require('passport');
var strategy = require('./setup-passport');

and then in the app.configure function make sure to have the cookieParser and session middlewares and then add the passport middlewares:

app.configure(function(){
  ...
  app.use(express.cookieParser());
  app.use(express.session({ secret: 'shhhhhhhhh' }));
  ...
  app.use(passport.initialize());
  app.use(passport.session());
  ...
  app.use(app.router);
});

The last bit of code you will need are the handlers for the passport callbacks:

// Auth0 callback handler
app.get('/callback', 
  passport.authenticate('auth0', { failureRedirect: '/url-if-something-fails' }), 
  function(req, res) {
    if (!req.user) {
      throw new Error('user null');
    }
    res.redirect("/");
  });

4. Setting up the callback URL in Auth0

After authenticating the user on Auth0, we will do a POST to a URL on your web site. For security purposes, you have to register this URL on the Application Settings section on Auth0 Admin app.

http://localhost:PORT/callback

5. Triggering login manually or integrating the Auth0 widget

@@sdk@@

6. Accessing user information

Once the user succesfuly authenticated to the application, a user will be generated which can be accessed through the req.user property.

app.get('/', function (req, res) {
  res.render('home', {
    user: JSON.stringify(req.user, 0, 2)
  });
});

The user profile is normalized regardless of where the user came from. For more information about the normalized user profile read this.

Congratulations!


Back | FazBrowse Home | New Git URL