Michael Hartl のRuby on Rails Tutorialのような基本的な認証システムがあります。基本的に、記憶トークンは Cookie に保存されます。Railscast #124の Ryan Bate のBeta-Invitationsを実装しました。ここでは、限られた数の招待状を送信できます。そうこうしているうちに、現在のユーザーが招待を送った後にログアウトしてしまうという問題に遭遇しました。これは、招待モデルの次のコードが原因でした。
招待.rb
belongs_to :sender, :class_name => 'User'
[...]
before_create :decrement_sender_count, :if => :sender
[...]
def decrement_sender_count
sender.decrement! :invitation_limit
end
ログで、sender.decrement! を見ました。Invitation_limit だけでなく、remember_token も更新しました。
UPDATE "users" SET "invitation_limit" = 9982, "remember_token" = 'PYEWo_om0iaMjwltU4iRBg', "updated_at" = '2012-07-06 09:57:43.354922' WHERE "users"."id" = 1
醜い回避策を見つけましたが、実際に何が問題なのか知りたいです。どこから始めたらいいのかわからないので、users コントローラーからの更新方法を紹介します。他に何が関連する可能性がありますか?
users_controller.rb
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = t('success.profile_save')
sign_in @user
redirect_to @user
else
flash.now[:error] = t('error.profile_save')
render 'edit'
end
end