Ruby Forum Italian Ruby user group > ExtJs + restful_authentication

Posted by Carmine Moleti (carminem)
on 26.02.2008 15:59
Salve a tutti,

Stò cominciando a giocare con ExtJs e Rails e mi sono arenato durante la
realizzazione del pannello di login.

Premetto che ho utilizzato i generatori di "restful_authentication" per
creare "user" e "sessions".

Ho, quindi, modificato l'action "create" del controller sessions in
questo modo:

  def create
    self.current_user = User.authenticate(params[:user][:login],
params[:user][:password])
    if logged_in?
      flash[:notice] = "Logged in successfully"
      respond_to do |format|
        format.js { head :ok }
      end
    else
      flash[:notice] = "Login failed"
      respond_to do |format|
        format.js { head :status => 500 }
      end
    end
  end

ed implementato la vista "new" per lo stesso controller come segue:

<div id="login_form"></div>
<% javascript_tag do  -%>
  Ext.onReady(function(){

    Ext.QuickTips.init();

    var loginFields = [
    { fieldLabel: 'Login', minLength: 4, xtype: 'textfield', name:
'user[login]', allowBlank: false, blankText: 'Per poter accedere è
necessario specificare il login!'},
    { fieldLabel: 'Password', xtype: 'textfield', inputType: 'password',
name: 'user[password]', minLength: 4, minLengthText: 'La password deve
essere lunga almeno 8 caratteri!', allowBlank: false, blankText:
'Occorre specificare una password valida per poter accedere!'},
    ];

    var loginForm = new Ext.form.FormPanel({
      title: 'Accesso al sistema',
      frame: true,
      defaults: { width: 200 },
      bodyStyle: 'padding 5px 5px 0',
      labelAlign: 'right',
      labelWidth: 75,
      width: 300,
      buttons: [{text: 'login', type: 'submit', handler:function(){
        loginForm.getForm().submit({
          url: '/session',
          method: 'POST',
          params: { authenticity_token: '<%= form_authenticity_token %>'
},
          success: function(){ alert('ok'); window.location.href =
'/welcome'; },
          failure: function(){ alert('errore'); window.location.href =
'/login';}
        });
      }}],
      buttonAlign: 'center',
      renderTo: 'login_form',
      items: loginFields
    }
    );

  });
<% end -%>

A questo punto, se durante il login:

- Inserisco credenziali errate
  Mi appare il messaggio "errore" e vengo riportato alla schermata di
login.

- Inserisco le credenziali giuste
  Non succede un bel nulla.

Le named route "/welcome" e "/login" sono rispettivamente:

  map.welcome '/welcome', :controller => 'welcome', :action => 'index'
  map.login '/login', :controller => 'sessions', :action => 'new'

Dopo aver inserito le credenziali corrette, se digito a mano
l'indirizzo:
http://localhost/3000/welcome

vengo riportato alla schermata corretta.

Dove sbaglio?
Grazie in anticipo per il Vs aiuto
Posted by Carmine Moleti (carminem)
on 26.02.2008 17:30
Mi rispondo da solo,

L'errore che ho commesso è quello di aver dimenticato la natura delle
richieste che vengono fatte tramite ExtJs. Sono AJAX.

Pertanto, il format.js deve essere { render(:update){|page| 
page.redirect_to welcome_path } }

per far si che tutto funzioni.

Urge ripasso attento ed approfondito.
Posted by DAddYE IT (ventura)
on 05.03.2008 19:17
Carmine Moleti wrote:
> Mi rispondo da solo,
> 
> L'errore che ho commesso è quello di aver dimenticato la natura delle
> richieste che vengono fatte tramite ExtJs. Sono AJAX.
> 
> Pertanto, il format.js deve essere { render(:update){|page| 
> page.redirect_to welcome_path } }
> 
> per far si che tutto funzioni.
> 
> Urge ripasso attento ed approfondito.

Ti andrebbe di collaborare a http://rails.lipsiasoft.com/wiki/lipsiadmin 
?
Posted by Carmine Moleti (carminem)
on 06.05.2008 16:16
DAddYE IT wrote:
> Ti andrebbe di collaborare a http://rails.lipsiasoft.com/wiki/lipsiadmin 
> ?

Scusami per l'enorme ritardo nel rispondere, ma solo oggi (e per caso) 
ho letto la tua replica.

Mi piacerebbe molto collaborare ma, purtroppo, non ho molto tempo nè 
(vista la complessità del progetto) le capacità giuste.

Uso rails da poco tempo e, fin'ora, per progetti molto semplici.

Grazie ancora!