More javascript (nodejs) to go with the passport wrapper I just posted:

###UserBook.js

    /*
     *  A wrapper for user Registration for a web site.
     *  This is an MYSQL version of the client to provide persistent state.
     *
     * Exports a single function that returns the object (UserBook) that does the work.
     * UserBook exposes two public methods:
     *
     *      updateUser(profile, userRegister(profile))
     *          profile:        An object with information about the user.
     *                          From this we will try and retrieve the local-id of the user.
     *                          If there is no local-user we create one.
     *          userRegister:   A callback used when the user-id is found.
     *                          The id is added to the profile and this is passed as the
     *                          parameter to the callback.
     *      getSavedUser(localId, userRegister(profile))
     *          localId:        The local-id of a user retrieved from the session information.
     *          userRegister:   A callback used when the user information is found.
     *
     */
    
    module.exports = function() {
        // Local DB connection
        var mysql   = require('mysql');
        var theDB   = mysql.createConnection({
                                                host:       '127.0.0.1',
                                                user:       'user',
                                                password:   'password',
                                                database:   'db'
                                                });
    
        // Create the UserBook object
        return {
                    // The db object kept locally
                    db:             theDB,
                    updateUser:     function(profile, userRegistered) {
                                        var db = this.db;
                                        // See if the user exists.
                                        db.query(   'SELECT * FROM Users WHERE Provider=? AND ProviderId=? LIMIT 1',
                                                    [profile.provider, profile.providerId],
                                                    function(err, rows) {
                                                        if (err) throw err;
                                                        if (rows.length == 1) {
                                                            // If we have found a local user the set the ID
                                                            profile.id = rows[0].ID;
                                                            if (profile.displayName != rows[0].DisplayName) {
                                                                // See if we need to update the display name.
                                                                db.query(   'UPDATE Users SET DisplayName=? WHERE Provider=? AND ProviderId=?',
                                                                            [profile.displayName, profile.provider, profile.providerId],
                                                                            function(err) {
                                                                                if (err) throw err;
                                                                            });
                                                            }
                                                            // Callback when user is identified.
                                                            userRegistered(profile);
                                                        } else {
                                                            // No local user found.
                                                            // So lets create a new one.
                                                            db.query(   'INSERT INTO Users (Provider, ProviderId, DisplayName) VALUES(?,?,?)',
                                                                        [profile.provider, profile.providerId, profile.displayName],
                                                                        function(err, result) {
                                                                            if (err) throw err;
                                                                            profile.id=result.insertId;
                                                                            // Callback when new user is created
                                                                            userRegistered(profile);
                                                                        });
                                                        }
                                                    });
                                    },
                    getSavedUser:   function(localId, userRegistered) {
                                        var db = this.db;
                                        // get the local user from the DB
                                        db.query(   'SELECT * FROM Users WHERE ID=? LIMIT 1',
                                                    [localId],
                                                    function(err, rows) {
                                                        if (err) throw err;
                                                        if (rows.length == 1) {
                                                            profile = { id:         rows[0].ID,
                                                                        provider:   rows[0].Provider,
                                                                        providerId: rows[0].ProviderId,
                                                                        displayName:rows[0].DisplayName};
                                                            // Callback when information is retrieved.
                                                            userRegistered(profile);
                                                        }
                                                    });
                                    },
        };
    }