passport-facebook-canvas
v0.0.3
Published
Facebook canvas authentication strategy for Passport.
Downloads
32
Readme
Passport Strategy for Facebook Canvas app
Use this strategy to log users in to your Facebook Canvas app automatically.
Note: This strategy simply augments passport-facebook. If you don't need Canvas support you should use that instead.
App Settings
Configuring Secure Canvas Url
As far as I know, Facebook has deprecated Canvas Url
in favour of Secure Canvas Url
and so requires setting up an SSL cert. You can produce a self-signed certificate
with a command such as this: (don't set a password for a testing cert)
# Ubuntu
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed_ssl.key -out self_signed_ssl.crt
Then you must tell express
to listen on another port, something like this:
var certificate = {
key: fs.readFileSync(path.resolve(__dirname, './self_signed_ssl.key'), 'utf8'),
cert: fs.readFileSync(path.resolve(__dirname, './self_signed_ssl.crt'), 'utf8')
}
http.createServer(app).listen(3000);
https.createServer(certificate, app).listen(3001);
Configuring Routes
This is the Secure Canvas Url
route that Facebook will POST data to.
Note If this is the first time the app has seen this user then redirect to failureRedirect
.
app.post('/auth/facebook/canvas',
passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/auth/facebook/canvas/autologin' }));
We cannot forward the user to another URL via HTTP redirect so we have to use a client-side js hack instead.
app.get('/auth/facebook/canvas/autologin', function( req, res ){
res.send( '<!DOCTYPE html>' +
'<body>' +
'<script type="text/javascript">' +
'top.location.href = "/auth/facebook";' +
'</script>' +
'</body>' +
'</html>' );
});
Please suggest a better solution: https://developers.facebook.com/docs/appsonfacebook/tutorial/#canvas
Now you should be able to navigate to your app page: https://apps.facebook.com/myapp/ and be prompted to approve the app. On subsequent visits you should be logged in automatically.