ログインおよびログアウトのためにAJAXリクエストをRailsサーバーに送信する(app/views/ではなく)静的なhtmlページを使用するRailsアプリケーションがあります。
ユーザー認証にセッションを使用し、ユーザーがログインするsession[:userid]
と設定され、「ログインしました」という応答が静的htmlページに返されます。ただし、ログアウトボタンをクリックしてログインした後session[:userid]
、nil
.
これが私のコードです:
ログインする場合:
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
ログアウトする場合
def logout
# here session is no longer available
session[:userid] = nil
render :text => 'logged out'
end
ログインページ:
<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>
ログアウトする場合:
<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>
ログインのログ:
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)
ログアウトのログ:
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)
クライアントからのAJAXリクエストにセッションを使用できないのは、AJAXの問題ですか?
前もって感謝します。