# [Rails4][Controller]處理用戶登入時系統強制轉向問題
###### tags: `Rails4`,`controller`
2019/12/22
今天在練習進度條線上課程遇到一個問題,
在做使用者登入時,若輸入不存在的使用者名稱,
系統會強制導向以該post方法為名稱的view.
routes:
```ruby
Rails.application.routes.draw do
#...
get "users/login"=>"users#login"
post "users/create_session"=>"users#create_session"
get "users/logout"=>"users#logout"
#...
end
```
controller:
```ruby
class UsersController < ApplicationController
def login
end
def create_session
#pass params[:account] from view
#use this params to find user by name or email
#so that user can login by email or name
@user=User.find_by(name: params[:name],password: params[:password])
if @user
flash[:notice]=@user.name
redirect_to root
else
render "login"
end
end
#...
end
```
view就是一個簡單的form,會傳回帳號密碼.
現在的問題在於,
上面的寫法若遇到用戶輸入不存在的使用者,
則系統會強制以get的方式重新導向名稱為create_session.html.erb的view,非常奇怪.
解決方式:
加上判斷式,讓系統導向特定view
```ruby
class UsersController < ApplicationController
#...
def create_session
#pass params[:account] from view
#use this params to find user by name or email
#so that user can login by email or name
@user=User.find_by(name: params[:account])|| User.find_by(email: params[:account])
if !@user || !check_password(@user.password,params[:password])
render "users/login"
else
flash[:notice]=@user.name
redirect_to root_path
end
private
def check_password(db_password,input_password)
db_password == input_password
end
end
#...
end
```