UNPKG

passport-mercadolibre-no-web-server

Version:
123 lines (89 loc) 3.73 kB
# Passport-Mercadolibre [Passport](https://github.com/jaredhanson/passport) strategy for authenticating with [MercadoLibre](http://www.mercadolibre.com) using the OAuth 2.0 API. Learn more about MercadoLibre OAuth schema [here](http://developers.mercadolibre.com/server-side/). ## Installation $ npm install passport-mercadolibre-no-web-server #### WARNING The OAuth2 Module (0.9.5), which is a dependency, automatically adds a 'type=web_server' parameter to the query portion of the URL. This extra parameters, is currently not supported by MercadoLibre authentication server, and thus should be commented for the module to work. To do this, you need to comment the following line in the *node_modules\passport-oauth\node_modules\oauth\lib\auth2.js* file: ```javascript exports.OAuth2.prototype.getOAuthAccessToken= function(code, params, callback) { var params= params || {}; params['client_id'] = this._clientId; params['client_secret'] = this._clientSecret; // ------- COMMENT THIS LINE-------------- // params['type']= 'web_server'; // --------------------------------------- var codeParam = (params.grant_type === 'refresh_token') ? 'refresh_token' : 'code'; params[codeParam]= code; ... } ``` ## Configuration The Mercadolibre authentication strategy authenticates users using a Mercadolibre account and OAuth 2.0 tokens. The strategy requires a `verify` callback, which accepts these credentials and calls `done` providing a user, as well as `options` specifying a client ID, client secret, and callback URL. You can obtain the client ID and secret by creating a MercadoLibre app [here](http://applications.mercadolibre.com.ar/list). ```javascript var MercadoLibreStrategy = require('passport-mercadolibre').Strategy; passport.use(new MercadoLibreStrategy({ clientID: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', callbackURL: 'http://www.example.com/auth/mercadolibre/callback', }, function (accessToken, refreshToken, profile, done) { // + store/retrieve user from database, together with access token and refresh token return done(null, profile); } )); passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function (user, done) { done(null, user); }); ``` ## Usage Use `passport.authorize()`, specifying the `'mercadolibre'` strategy, to authenticate requests. For example, as route middleware in an [Express](http://expressjs.com/) application: ```javascript app.get('/auth/mercadolibre', passport.authorize('mercadolibre')); app.get('/auth/mercadolibre/callback', passport.authorize('mercadolibre', { failureRedirect: '/login' }), function(req, res) { // Successful authentication, redirect home. res.redirect('/'); }); app.get('/', ensureAuthenticated, function(req, res) { res.send("Logged in user: " + req.user.nickname); } ); function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); }; res.redirect('/auth/mercadolibre'); }; ``` The properties available in the `user` object are: - provider _--> mercadolibre_ - nickname - first_name - last_name - email - accessToken But you can get more information (a lot more!) accessing the raw user profile as provided by MercadoLibre: - \_raw _--> raw server response_ - \_json _--> JSON object with server response_ > **Note:** Please notice that the module internally sets up the HTTPS module for using SSL v3 as shown below: > > `https.globalAgent.options.secureProtocol = 'SSLv3_method';` ## License [The MIT License](http://opensource.org/licenses/MIT) ## Thanks Thanks to https://github.com/mjpearson/passport-wordpress for the README and file structure.