A CouchDB Authentication Module that uses Facebook API to authenticate users
Erlang
71
2 commits
updated Mar 20, 2012
The newer CouchDB-XO_Auth project does this better so I suggest looking at that rather than this.
CouchDB has a number of Authentication modules built in (cookie, default & OAuth) and several open source projects for others such as LDAP and OpenID. This project adds a Facebook authentication module that uses the Facebook authentication API to log people in.
It consists of a CouchDB httpd_global_handler that responds to http GET requests and initiates the Facebook login sequence. Once logged in, the handler requests an access code and retrieves the Facebook profile information via https://graph.Facebook.com/me. The user's Facebook ID can then be used to retrieve the CouchDB users document from the authentication_db to create the CouchDB session. The access code is stored in the user record. If there isn't a matching user record then one is created using the Facebook ID as the username
An error during Facebook login will return HTTP 403 to the original caller.
For our example we assume the app is hosted at my_site.com
There is an unsophisticated Makefile with targets for test (requires eunit), compile and install.
In order to compile and install this module you might have to edit the Makefile and change one or more of COUCH_ROOT, _COUCHDB_ERLANG_LIB, COUCHDB_LOCALD and COUCHDB_INIT_SCRIPT values to point to the appropriate directories and file within your couchdb installation.
You need to copy the beam file to somewhere where couch can find it. That location could be something like couchdb/erlang/lib/couch-1.0.1/ebin/ it depends on where/how you've installed couch.
You'll also need to create a [Facebook app](See http://developer.Facebook.com)
You'll need to add an ini file or ini entries in couch config to use this module.
[httpd_global_handlers]
_fb = {fb_auth, handle_fb_req}
_fb_resp = {fb_auth, handle_fb_resp_req}
[fb]
scope=offline_access,user_about_me
client_id=1234567890
redirect_uri=http://my_awesome_app.com/_fb_resp
client_secret=1234567890ABCDEF123456789
destination_db=_users
client_app_uri=http://my_awesome_app.com/home?
_fb
This is the couch location for the code that redirects the user to Facebook.
Pass in a param called clientapptoken if you want something added to the
client app redirect at the end of the auth process (for when control is
returned to your app).
_fb_resp
This is the couch location that Facebook should redirect back to. This should
match the redirect_uri field in the [fb] section.
NOTE: Facebook requires that your site is public. The 'Site URL' setting of the Facebook app needs to be set to your site.
scope A comma separated list of the scope of access required to Facebook by the app. See Facebook dev docs for all the scope names. At least offline_access and user_about_me are required.
client_id
The App ID of your Facebook app
redirect_uri
This is the location that Facebook will be told to return the user to when
they're done logging in. This MUST start with the same location that you set
for Site URL in the Facebook app
client_secret
DO NOT PUBLISH THIS! It is the App Secret from your Facebook app.
It is used behind the scenes to contact Facebook. If anyone gets hold
of this they can pretend to be your app. Beware!
destination_db
This is the name of the database that the user record will be created in.
This is probably _users , but is configurable in case you want to test
the app without risking your existing _users database.
client_app_uri
When _fb_resp has been reached it will then need to return the flow to
your app. You control where this redirect location with this setting.
Any value passed to the initial _fb_ call param clientapptoken will be
appended to this URL.
CouchDB-Facebook Authentication is licensed under: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
Copyright (c) 2011 Ocasta Labs Ltd.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Erlang
100.0%
A CouchDB Authentication Module that uses Facebook API to authenticate users
Erlang
71
2 commits
updated Mar 20, 2012
The newer CouchDB-XO_Auth project does this better so I suggest looking at that rather than this.
CouchDB has a number of Authentication modules built in (cookie, default & OAuth) and several open source projects for others such as LDAP and OpenID. This project adds a Facebook authentication module that uses the Facebook authentication API to log people in.
It consists of a CouchDB httpd_global_handler that responds to http GET requests and initiates the Facebook login sequence. Once logged in, the handler requests an access code and retrieves the Facebook profile information via https://graph.Facebook.com/me. The user's Facebook ID can then be used to retrieve the CouchDB users document from the authentication_db to create the CouchDB session. The access code is stored in the user record. If there isn't a matching user record then one is created using the Facebook ID as the username
An error during Facebook login will return HTTP 403 to the original caller.
For our example we assume the app is hosted at my_site.com
There is an unsophisticated Makefile with targets for test (requires eunit), compile and install.
In order to compile and install this module you might have to edit the Makefile and change one or more of COUCH_ROOT, _COUCHDB_ERLANG_LIB, COUCHDB_LOCALD and COUCHDB_INIT_SCRIPT values to point to the appropriate directories and file within your couchdb installation.
You need to copy the beam file to somewhere where couch can find it. That location could be something like couchdb/erlang/lib/couch-1.0.1/ebin/ it depends on where/how you've installed couch.
You'll also need to create a [Facebook app](See http://developer.Facebook.com)
You'll need to add an ini file or ini entries in couch config to use this module.
[httpd_global_handlers]
_fb = {fb_auth, handle_fb_req}
_fb_resp = {fb_auth, handle_fb_resp_req}
[fb]
scope=offline_access,user_about_me
client_id=1234567890
redirect_uri=http://my_awesome_app.com/_fb_resp
client_secret=1234567890ABCDEF123456789
destination_db=_users
client_app_uri=http://my_awesome_app.com/home?
_fb
This is the couch location for the code that redirects the user to Facebook.
Pass in a param called clientapptoken if you want something added to the
client app redirect at the end of the auth process (for when control is
returned to your app).
_fb_resp
This is the couch location that Facebook should redirect back to. This should
match the redirect_uri field in the [fb] section.
NOTE: Facebook requires that your site is public. The 'Site URL' setting of the Facebook app needs to be set to your site.
scope A comma separated list of the scope of access required to Facebook by the app. See Facebook dev docs for all the scope names. At least offline_access and user_about_me are required.
client_id
The App ID of your Facebook app
redirect_uri
This is the location that Facebook will be told to return the user to when
they're done logging in. This MUST start with the same location that you set
for Site URL in the Facebook app
client_secret
DO NOT PUBLISH THIS! It is the App Secret from your Facebook app.
It is used behind the scenes to contact Facebook. If anyone gets hold
of this they can pretend to be your app. Beware!
destination_db
This is the name of the database that the user record will be created in.
This is probably _users , but is configurable in case you want to test
the app without risking your existing _users database.
client_app_uri
When _fb_resp has been reached it will then need to return the flow to
your app. You control where this redirect location with this setting.
Any value passed to the initial _fb_ call param clientapptoken will be
appended to this URL.
CouchDB-Facebook Authentication is licensed under: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
Copyright (c) 2011 Ocasta Labs Ltd.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Erlang
100.0%