Minimal OpenID authentication system with RoR

Yoan BlancThu, 28 Dec 2006, , , ,

I’ve talked to you about OpenID a couple of time ago, now I gonna show you how to do an OpenID authentication with Rails.

First step install rails and start a rails website.

# gem install rails

$ rails openid

Now install the OpenID login generator and run it.

# gem install openid_login_generator

$ cd openid
$ script/generate openid_login auth

Open the README_LOGIN file and read it, I’ll resume it here. The file app/controller/application.rb should look like.

require_dependency "openid_login_system"

class ApplicationController < ActionController::Base
	include OpenidLoginSystem
end

The database configuration (config/database.yml). SQLite: keep it stupid simple, but continue to use MySQL maybe more reliable but it’s not the purpose here.

development:
  adapter: sqlite
  database: db/openid_dev.db

Init the database :

$ sqlite3 db/openid_dev.db "CREATE TABLE 'users' \
( \
  'id' INTEGER PRIMARY KEY NOT NULL, \
  'openid_url' VARCHAR(256) DEFAULT NULL \
);"

And test it!

$ script/server

Open your browser at http://localhost:3000/auth/login/ enter your OpenID id. You should log in. Now you can verify that it worked in the backend too.

$ sqlite3 db/openid_dev.db
> .dump

You’ll se a line like this one.

INSERT INTO "users" VALUES(1, \
  'https://yoan.blanc.myopenid.com/');

Marvellous! Every Rails applicaiton can be OpenID compatible in very easy way. Don’t forget to RTFM and have fun.

...for the Djangoists, they can follow this tutorial CookBook Shortcuts OpenID Authentication.

Il de ça quelques temps, je vous avais parlé de OpenID, la petite révolution en marge des Microsoft Passports. Aujourd’hui, nous allons voir ensemble par un tutoriel aussi ludique de trivial comment créer sa première application web (si c'est le cas) avec Ruby On Rails permettant l’authentification via OpenID, donc une authentification décentralisée, merveilleux.

Les prérequis sont d’avoir installé RoR, SQLite et OpenID Login Generator. À priori, il y a tout ce ses pages pour vous en sortir seul, mais rien ne vaut de se faire prendre par la main (non non pas de screencast, faut pas pousser).

# gem install rails \
  openid_login_generator sqlite3-ruby

Allez, au lieu de faire la moue, sortez-moi un term et hop ! (La version anglaise est plus light, n’hésitez pas à vous y référer si je vais trop vite.)

$ rails openid
$ cd openid
$ script/generate openid_login auth
$ sqlite3 db/openid_dev.db "CREATE TABLE 'users' \
( \
  'id' INTEGER PRIMARY KEY NOT NULL, \
  'openid_url' VARCHAR(256) DEFAULT NULL \
);"
$ (echo <<EOF
development:
  adapter: sqlite3
  database: db/openid_dev.db
EOF
) > config/database.yml
$ script/server
		

Maintenant, ouvrez la page http://localhost:3000/auth/login entrez-y votre OpenID, et vous devriez arriver sur la page /auth/welcome vous félicitant car vous le méritez bien.

Une petite vérification de notre base de donnée.

$ sqlite3 db/openid_dev.db .dump | grep "INSERT"
INSERT INTO "users" VALUES(1, \
  'https://yoan.blanc.myopenid.com/');

Que dire: « merveilleux ! »

Que les Djangoïstes ne soient en reste, on trouve plus ou moins la même fonctionnalité à moindre coût également pour ce merveilleux framework en Python : CookBook Shortcuts OpenID Authentication.