运行Ruby1.9.3p545 rails 4.1.4我有一个应用程序,用户可以通过facebook、twitter等登录,并且可以手动重新登录。我想对那些已经手动注册的人进行登录处理。路由是获得'auth/:provider/callback',到:'sessions#create‘
get 'auth/failure', to: redirect('/')
get 'signout', to: 'sessions#destroy', as: 'signout'
get "sign_up" => "profiles#new", :as => "sign_up"
get "log_in" => "logins#new"
post "log_in" => "logins#login"除了手动日志外,一切正常。logins.new提供一个表单ok,但后续提交总是在create的会话控制器中结束。我定义了一个登录控制器,并试图在路由中使用上面的post,以使其远离sessions#create中的无所不在的进程。登录表单是
登录
<%= form_tag sessions_path do %>
<p>
<%= label_tag :email %><br />
<%= text_field_tag :email, params[:email] %>
</p>
<p>
<%= label_tag :password %><br />
<%= password_field_tag :password %>
</p>
<p class="button">
<%= submit_tag "Sign in" %>
</p>
<% end %>logins#login是
def login
authorized_user = Profile.authenticate(params[:name_or_email],params[:password])
if authorized_user
flash[:notice] = "Wow Welcome again, you logged in as #{authorized_user.username}"
redirect_to(:action => 'home')
else
flash[:notice] = "Invalid Username or Password"
flash[:color]= "invalid"
render "login"
end我是否可以将登录表单的提交指示远离会话控制器?谢谢提前结束
发布于 2014-07-25 19:38:25
线
<%= form_tag sessions_path do %>就是扔东西的东西。它将表单发布到sessions_path。尝试用<%= form_tag log_in_path do %>替换它,或者更好的是,用<%= form_tag "" do %>替换它,因为默认的做法是将其发送到与当前页面相同的URL中。
一些进一步的澄清:
<%= form_tag sessions_path do %>生成以下HTML (粗略地说,跳过一些与此问题无关的细节):
<form action="/sessions" method="post">因为/sessions是通向sessions#create的路径。您希望action是/log_in,即logins#login的路径,因此您希望更改要传递给form_tag的参数。
由于您已经在页面log_in上,如果您将操作保留为空白,即:
<form method="post">因为浏览器的默认行为是将文章发布到相同的页面上,因此它将使您在想要的地方找到自己的位置。
https://stackoverflow.com/questions/24963203
复制相似问题