2012-01-16 7 views
2

私はRails 3.1.0を使用していますが、ルータURLにパラメータ文字列を「必要」にしたいと考えています。の方法です。私はそうすることを「必要」にrouter.rbファイルに制約を追加する予定です「必須」パラメータに関連するルーティングを処理するにはどうすればよいですか?

my_site_name/user/1?token=12345abcdr 

:それは私がので、ユーザーの情報を更新するために、HTTPのPOSTリクエストを実行する上でチェックしなければならないというtokenパラメータを持っている、ですtokenそれはお勧めですか?私はそれのように進めるべきですか?もしそうなら、私はどのように関連するルータを述べることができますか?


たぶん私は状態/二つのパラメータをこのように渡す「という名前のルータを」使用することができます

confirm_user_url(@user, token) 
+0

トークンの意味を明確にすることはできますか?これはcurrent_userとどう違うでしょうか?これは、失われたパスワードのmd5ハッシュスキームに似ていますが、そのスキームはcurrent_userでないため存在します – timpone

+0

なぜPOSTトークンを設定する必要はありませんか? users_controller内のユーザー情報を更新する前に、トークンが設定されていない場合、ユーザーを別のページにリダイレクトすることができます。しかし、私はあなたがアーカイブしようとしていることを確信していません - おそらくcsrf予防の何らかの方法でしょうか?そうであれば、レールはデフォルトで実装されています。[このリンク](http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf)を参照してください。 – Markus

+0

@timpone - そうです、失われたパスワードのmd5ハッシュスキームです。 – Backo

答えて

0

は、私の知る限り理解されるように、あなたは「、途中で(「ので、ユーザーの情報を更新するために、HTTPのPOSTリクエストを実行する」ときに必要なトークンのパラメータを作成する必要がありますしようとしています更新している場合は、PUTリクエストですか?)。その場合は、カスタム制約を使用してください。あなたのroutes.rbで:

class TokenConstraint 
    def matches?(request) 
    request.params[:token].present? # or other logic to check token 
    end 
end 

MyApp::Application.routes.draw do 
    put "https://stackoverflow.com/users/:id" => "users#update", :constraints => TokenConstraint.new 
end 

はそれがお役に立てば幸いです。

1

制約ルートパラメータがこれ以上、構文をチェックするのに便利ではありません。

あなたのケースでは、before_filterをアプリケーションコントローラまたは特定のコントローラに配置できます。 application_controller.rbで

before_filter :check_token 
. 
. 
. 
def check_token 
. 
. 
if token_valid 
    # do this 
else 
    # do this 
    return false # to stop further processing by other controllers 
end 
end 
+0

あなたは正しいかもしれませんが、入力パラメータを "理解"している/気にする "confirm_user_url(@user、token)"のような "名前付きルート"を使う方法はありますか? – Backo

+0

問題を理解できない。 params [:token]でトークンを、params [:user]でユーザにアクセスできるように、必要なテストを実行します。 –

+0

@AlainBeauvoisは* URLコンストラクタ*がうまくいくと思っています。言い換えれば、URLコンストラクタacceptsは引数 "token"を引数とし、params [:token]の形式でコントローラにアクセス可能にします。 –

関連する問題