Binarylogic authlogic + openid problem

Jako że tutaj (i wszędzie :)) do autoryzacji i zarządzania użytkownikami poleca się plugin authlogic, to ja nie mogę odstawać od reszty.
Grzecznie przepisałem do swojej aplikacji kod z oficjalnego demo ( http://github.com/binarylogic/authlogic_example/tree/with-openid ) no i wygląda na to że wszystko działa, acz kolwiek nie do końca.

Adres demo: http://authlogicexample.binarylogic.com/user_session/new

Spróbójcie zalogować się z użyciem OpenId wpisując w pole openid byle co, efektem takiej akcji jest:

[code]Processing UserSessionsController#create (for 79.186.33.37 at 2009-06-12 23:54:51) [POST]
Parameters: {“user_session”=>{“openid_identifier”=>“asdasd”, “password”=>"[FILTERED]", “login”=>"", “remember_me”=>“0”}, “action”=>“create”, “authenticity_token”=>“YS2IQQIpaqKS/1dJlDk+X+FRxO0oqzqR+xD4lwMbTc8=”, “controller”=>“user_sessions”}
User Columns (1.5ms) SHOW FIELDS FROM users
[OPENID] No usable OpenID services were found for “http://asdasd/

ActionView::MissingTemplate (Missing template user_sessions/create.erb in view path app/views):
app/controllers/application_controller.rb:84:in render' haml (2.1.0) lib/sass/plugin/rails.rb:19:inprocess’

Rendering rescues/layout (internal_server_error)[/code]
Aplikacja chce mnie przekierować do create.erb mimo tego że wcześniej zdeklarowałem że wrazie wypadku mam zostać przeniesiony znowu do akcji new:

def create @user = User.new(params[:user]) @user.save do |result| if result flash[:notice] = "Account registered!" redirect_back_or_default account_url else render :action => :new end end end
Moje pytanie jest następujące, jak przełapać wyjątek ([OPENID] No usable OpenID services were found for “http://asdasd/”)?

Z góry dzięki za pomoc.

  1. Jesteś pewien że to wyjątek?
  2. Dawaj kod. Czym się różni od przykładów na http://authlogic-oid.rubyforge.org/ ?
  1. nie jestem
  2. http://github.com/swistaczek/MojeTesty/tree/master
    w sekcji odnośnie openid nie różni się wogóle, to jest ten sam kod, w demo u nich występuje ten sam problem co u mnie

Zrób na pałę
rescue render :action => :new
zaraz przed zamknięciem definicji metody create.

(oczywiście to workaround a nie realne rozwiązanie problemu – może bug report na lighthous’ie authlogic?)

Tomash: niestety nie pomogło http://pastie.org/510293
Tu sie zaczyna walić:
http://pastie.org/510303

Authlogic jest wrapperem na railsowy plugin openid_authentication. Polecam używać go bezpośrednio, bez korzystania z authlogic openid. Z authlogic openid miałem kilka problemów i zrezygnowałem z niego. Pozatym openid_authentication daje większą kontrolę nad tym co robimy.

Co do problemu to spróbuj znormalizować url przed wysłaniem rządania do dostawcy openid:
OpenIdAuthentication.normalize_url(user.identity_url)

Beerkg, normalizacja url niestety nie pomaga, dalej ten sam błąd. Analizuje kod tego plugina i za cholere nie wiem dlaczego w razie niepowodzenia chce wyświetlić akcje create.

Prosiłeś na priwa o udostępnienie tego kodu, ale może komuś jeszcze się przyda więc umieszczę go tutaj:)

Mniej więcej tak:

class UserSessionsController < ApplicationController
def create
if using_open_id?
open_id_authentication
else
password_authentication
end
end

protected
  def password_authentication
   # Tutaj standardowa autentykacja
  end

def open_id_authentication
authenticate_with_open_id do |result, identity_url, registration|
if result.successful?
@user = User.find_or_initialize_by_openid_identifier(identity_url)
if @user.new_record?
@user.create_user_with_openid
end
user_session = UserSession.new @user # Tutaj ustawiamy sesje authlogic
user_session.save

    redirect_user_back_or_default home_path
  else
    @user_session = UserSession.new
    flash.now[:error] = result.message
    render :action => :new
  end
end

end
end

Wyciągnąłem to z działającego kodu ale zmieniłem kilka nazw i wywaliłem kilka rzeczy żeby było bardziej czytelne, więc mogą być jakieś literówki. Nie gwarantuję że zadziała bez zmian, ale powinien ci dać pojęcie jak powinna wyglądać autentykacja z openid.

Więcej informacji znajdziesz tutaj:


Beerkg, bardzo dziękuje po krótce rozumiem schemat działania, czy mógłbyś jeszcze udostępnić kawałek kodu metody .create_user_with_openid (w user)?

Metodę create_user_with_openid możesz wywalić, a zamiast niej po prostu stworzyć usera. Ja w niej ustawiam kilka pól i nic więcej skomplikowanego nie robię.

Ok. Mam jeszcze jedno pytanie, jak poprosić serwer torzsamości by dał nam wizytówkę użytkownika (chcę dostać email i login)?