0

私はレールに比較的慣れていないので、現在、単純なログイン・ログアウト・システムを開発しています。

生成された URL にログインすると、私のアプリでは次のようになります。

ローカルホスト:3000/ユーザー/インデックス/7

ログアウトすると、ルートに戻ります。しかし、この URL をコピーして別のブラウザ ウィンドウに貼り付けると、ログイン フォームに移動せずにすぐにログインできます。この問題を修正する方法。

ユーザーIDをセッションハッシュに保存しようとしましたが、ログアウト時にセッションのユーザーIDをnilに設定しました。しかし、それはうまくいきません。助けが必要です。

編集:

ホームコントローラーで

class HomeController < ApplicationController
   def signin
     user=User.find(:all,:conditions=>["user_login=? AND user_password=?",params[:user]     [:username],params[:user][:password]);

   if user!=nil
        session[:user_id]=user.user_id;
        redirect_to({:controller=>'user'})
   end

   end
end

ユーザーコントローラーにはログアウトメソッドがあります:

def logout
   session[:user_id]=nil;
   redirect_to({:controller=>'home'});
end

私の routes.rb ファイルは次のようになります。

ActionController::Routing::Routes.draw do |map|

  map.root :controller => "home",:action => "index"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

編集:

ユーザーコントローラーのインデックスメソッドでセッションハッシュのID値をチェックしていなかったこの問題を解決しました。しかし、別の質問があります。Rails 2.3.17 のアプリを持っていて、それを最新バージョンに移行したい場合、どのくらいの変更を加える必要がありますか?

4

4 に答える 4

2

コントローラーでこれらのアクションに before_filter を設定できます。その before_filter を使用すると、セッションが nil であるか、値が存在するかを確認できます。

それ以外の場合は、この railscasts ビデオに従うことができます

http://railscasts.com/episodes/250-authentication-from-scratch

于 2013-05-03T11:13:11.653 に答える
0

ここで車輪を再発明しようとしていると思います。has_secure_passwordUser モデル内で使用して を生成sessions_controllerし、作成と破棄を処理できます。メソッドは基本的に同じですが、has_secure_passwordフラグがあります。次に、セッションを適切に破棄するように注意する必要があります。

于 2013-05-03T12:18:02.460 に答える
0

https://github.com/plataformatec/deviseのような既存の認証システムを使用することを強くお勧めします

このサイトでは、他の既存のシステム、およびその人気と開発活動の概要を簡単に取得できます。 https://www.ruby-toolbox.com/categories/rails_authentication

自分でそのようなことをプログラムする必要はありませんが、本当にやりたい場合は、これも役立つかもしれません: http://railscasts.com/episodes/250-authentication-from-scratch-revised . しかし、私は絶対に工夫をお勧めします。

于 2013-05-03T12:53:37.073 に答える