Ahora sólo queda seguir las instrucciones que encontramos en los links, pero con un par de matices:
- Generamos las tablas que necesita el plugin
> ruby script/generate open_id_authentication_tables MigrationName
Esto generará una migration con las tablas open_id_authentication_associations y open_id_authentication_nonces, asi que...
> rake db:migrate
Si el modelo User aún no tiene un campo para almacenar el openid, tenemos que crearlo, claro está.
-
En el archivo de rutas nos aseguramos de que exista una ruta root y permitimos el acceso al método create del controlador sessions mediante GET
map.open_id_complete 'session', :controller => "sessions", :action => "create", :requirements => {:method => :get }
-
En la vista correspondiente al login de la aplicación, añadimos un campo que contenga el openid del usuario.
<%= text_field_tag 'identity_url' %>
-
Adaptamos sessions_controller para que ejecute el login contra openID cuando sea necesario. Basta con seguir las instrucciones que nos proporcionan los creadores del plugin, juntarlo con el código que tengamos para autenticar (en este caso, restful_authentication) y retocar un par de cosas.
En el controller sessions_controller.rb
def create
if !params[:identity_url].blank? || request.get?
open_id_authentication(params[:identity_url])
else
password_authentication
end
end
protected
def password_authentication
self.current_user = User.authenticate(params[:login], params[:password])
if logged_in?
if params[:remember_me] == "1"
current_user.remember_me unless current_user.remember_token?
cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
end
successful_login "Logged in successfully"
else
failed_login "User and password do not match"
end
end
def open_id_authentication(identity_url)
authenticate_with_open_id(identity_url) do |status, identity_url|
unless status.successful?
failed_login status.message
else
if @current_user = User.find_by_identity_url(identity_url)
successful_login
else
failed_login "Sorry, no user by that identity URL exists"
end
end
end
end
y en el plugin, en open_id_authentication.rb
def successful?
@code == :successful
end
Y a correr.
Salud y rocanrol. (hoy no hay ánimo para canciones, sorry)