J'ai une application Rails qui utilise des pages html statiques (pas dans app/views/) envoyant des requêtes AJAX au serveur rails pour la connexion et la déconnexion.
J'ai utilisé la session pour l'authentification de l'utilisateur et lorsque l'utilisateur se connecte, session[:userid]
et la réponse "logged in" est renvoyée à la page html statique. Cependant, après avoir ouvert une session, lorsque je clique sur le bouton de déconnexion, j'ai trouvé le message suivant session[:userid]
est devenu nil
.
Voici mon code :
Pour se connecter :
def login
# code here
if encrypt(params[:password]) == @user.password # authenticated
session[:userid] = @user.id
render :text => 'logged in'
else # wrong password
render :text => 'password not correct'
end
end
Pour la déconnexion
def logout
# here session is no longer available
session[:userid] = nil
render :text => 'logged out'
end
Page de connexion :
<button id='login_button'>Log in</button>
<script type="text/javascript" charset="utf-8">
$('#login_button').click(function() {
$.ajax({
type: 'POST',
url: 'http://localhost:3000/user/login',
data: { username : $('#login_username').val() , password : $('#login_password').val() }
}).done(function(data) {
if (data == 'logged in') {
window.location = 'logged_in.html';
} else {
alert(data);
}
});
});
</script>
Et pour la déconnexion :
<button id='logout_button'>Log out</button>
<script type="text/javascript" charset="utf-8">
$('#logout_button').click(function() {
$.ajax({
type: 'POST',
url: 'http://localhost:3000/user/logout',
}).done(function(data) {
console.log(data);
});
});
</script>
Log pour la connexion :
Started POST "/user/login" for 127.0.0.1 at 2012-10-12 16:28:46 -0500
Processing by UserController#login as */*
Parameters: {"username"=>"name", "password"=>"[FILTERED]"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE (username = 'name')
Completed 200 OK in 12ms (Views: 0.3ms | ActiveRecord: 0.6ms)
Log pour la déconnexion :
Started POST "/user/logout" for 127.0.0.1 at 2012-10-12 16:28:50 -0500
Processing by UserController#logout as */*
{} <--------------------------------------- here I printed out session
Rendered text template (0.0ms)
Completed 200 OK in 1ms (Views: 0.7ms | ActiveRecord: 0.0ms)
Est-ce le problème d'AJAX, que nous ne pouvons pas utiliser la session pour les demandes AJAX du client ?
Merci d'avance.