The official Stitchz authentication strategy for Passport.js

What is Passport.js for Node.js? "Passport is authentication middleware for Node.js. Extremely flexible and modular, Passport can be unobtrusively dropped in to any Express-based web application."

The Stitchz Passport authentication strategy authenticates users with their Social Identity. The strategy setup is simple and requires a 'verify' callback which accepts these credentials and calls 'done' providing a user.

Getting Started

To get started, create a Stitchz application by going to https://login.stitchz.net/Application/Create. Use your application settings in your strategy configuration below.

bash/command

Install the npm package for 'passport-stitchz'

$ npm install passport-stitchz

Javascript

Use 'passport.authenticate()', specifying the 'stitchz' strategy, to authenticate requests. For example, as route middleware in an Express application:

app.post('/callback',
    passport.authenticate('stitchz', { failureRedirect: '/login' }),
    function(req, res, next) {
        if (!req.user) {
            throw new Error('user null');
        }
        res.redirect("/");
    }
);

Html

Then add your application's login options by adding the html code below to your login page...

<div id="stitchzsociallogin"></div>

<script src="/Scripts/stitchz.client.js" type="text/javascript"></script>
<script type="text/javascript">
StitchzClient.ready(function (e) {
    StitchzClient.AddIframeToDOM({
        ApiKey: 'your Stitchz.net ApiKey',
        ReturnUrl: 'http://localhost:3000/callback',
        Height: '280', // optional
        Width: '330', // optional
        MaxHeight: '768', // optional
        MaxWidth: '500', // optional
        AutoResize: true, // optional
        AppURL: 'https://appurl.stitchz.net',
        Version: '2',
        HtmlElementIdNameToAddIframeTo: 'stitchzsociallogin'
    });
});
</script>

Passport Strategy

And finally, in your strategy file...

var StitchzStrategy = require('passport-stitchz'),
passport = require('passport');

passport.use(new StitchzStrategy({
        apiKey: 'your Stitchz.net ApiKey',
        appSecret: 'your Stitchz.net AppSecret',
        appHost: 'your Stitchz.net App URL', // i.e. appurl.stitchz.net
        redirectUri: 'http://localhost:3000/callback', // your website's callback URL
        version: '2', // optional - default is '1'
         format: 'json' // optional - default is 'xml'
    },
    function(err, resp, done) {
        User.findOneOrCreate({ identifier: resp.profile.identifier },
            resp.profile,
            function (err, user) {
                if (err) {
                    return done(err);
                }

                if (!user) {
                    return done(null, false, {
                        message: 'Unknown user'
                    });
                }

                return done(null, user);
            });
    })
);

Dependencies

JavaScript, Node.js

Bugs

To submit bug reports and feature suggestions, or to track changes: http://stitchz.uservoice.com/forums/81839?lang=en

More

Additional info can be found on the Passport-Stitchz github page or on the Passport-Stitchz npm page.