为了传递查询参数,您需要像处理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 令牌的答案部分。