2

アカウントを登録せずに、ユーザーにアプリケーションをテストしてもらいたい。これを行うために、固定ユーザーとパスワードを送信してセッションを作成する、アプリケーションサイト(http:// app / login using devise)へのPOSTを作成するリンクを商用サイトに含めることを考えました。link_toを:method =>'post'で試しましたが、POST本文でパラメーターを送信する方法がわかりません。助言がありますか?

私はこれで試しています

link_to 'Blah', {:params => 'asdf'}, {:method => :post, :href => 'http://localhost:3001/login'}
4

1 に答える 1

1

クエリパラメータを渡すには、GETリクエストの場合と同様に、URLの一部としてそれらを配置する必要があります。そのようです:

<%= link_to "Click Here", "/login?username=testuser&password=moojuice", :method => :post %>

または、Railsルートヘルパーを使用している場合

<%= link_to "Click here", login_path(:username => "testuser", :password => "moojuice"), :method => :post %>

ログインしているものと同じRailsアプリケーションでこのリンクを使用するかどうかは、元の質問に基づいて正確にはわかりません。そうでない場合は、もう1つちょっとした落とし穴があります。外部サイトから投稿する場合、ページの読み込み時にRailsが自動的に生成するCSRFトークンが失われるため、Railsはリクエストを無視する可能性が高くなります。これを実現するには、ログインを処理するコントローラーにprotect_from_forgeryメソッド呼び出しを配置する必要があります。/ loginルートがSessionsControllerアクションにマップされていると仮定すると、次のように作成されます。

class SessionsController < ApplicationController
  protect_from_forgery :except => [:create] # Need this to ignore CSRF token
  def create
    # Login logic
  end
end

そうは言っても、CSRFトークンを削除すると、アプリケーションの安全性が低下するため、削除することはお勧めしません。次のように、 SessionsControllerに特別なアクションを実装して独自のセッションにログインすることをお勧めします。

class SessionsController < ApplicationController

  def create
    # Login logic
  end

  def demo_account
    # Logic to create session for demo account
  end
end

このようにして、POSTリクエストを実行するリンクを忘れて、 /demo_loginをSessionsControllerの*demo_account*アクションにマップするGETルートを設定することができます。これにより、このリンクをアプリケーション内だけでなく、どこでも使用できるようになります(@allaireが提案した以前のコメント投稿者の1人のような電子メールのように)。ただし、Railsアプリケーションのリンクから機能させたい場合は、CSRFトークンに関する私の回答の一部を無視してください。

于 2012-10-19T16:02:40.940 に答える