2

我希望用户在不注册帐户的情况下测试我的应用程序。为了做到这一点,我考虑在我的商业站点中包含一个链接,该链接将向我的应用程序站点(http://app/login using devise)发送一个固定的用户和密码,从而创建一个会话。我尝试使用 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 应用程序中使用此链接,我不确定是否基于原始问题。如果你不是,还有另一个小问题。从外部站点发帖时,Rails 很可能会忽略您的请求,因为您将丢失 Rails 在加载页面时自动生成的 CSRF 令牌。为了实现这一点,您必须在处理您的登录的控制器中调用protect_from_forgery 方法。假设您的 /login 路由映射到SessionsController操作create

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

话虽如此,我不建议删除 CSRF 令牌,因为这会降低您的应用程序的安全性。我建议在您的SessionsController中实施一个特殊操作,将它们登录到自己的 Session 中,如下所示:

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 所建议的那样)。但是,如果您希望它通过 Rails 应用程序中的链接工作,那么只需忽略我关于 CSRF 令牌的答案部分。

于 2012-10-19T16:02:40.940 回答