我正在爲我的應用程序使用自定義無密碼登錄。用戶只需輸入他們的用戶名或電子郵件,然後將具有令牌的唯一登錄鏈接發送給他們。他們輸入用戶名或電子郵件到一個簡單的形式:rails 4強參數會話
<%= form_tag request_token_path, id:'login-form' do %>
<%= text_field_tag :user_id %>
<% end %>
這帖子的sessions#request_token
方法,驗證用戶是否存在,然後沿着登錄鏈接發送。
def request_token
lookup = session_params[:user_id]
if lookup.include? '@'
@user = User.find_by(email: lookup)
else
@user = User.cached_find(lookup)
end
if @user
@user.send_login_link
redirect_to login_path, notice: "#{@user.username.capitalize} your email was sent!"
else
redirect_to login_path, notice: "Whoops! Looks like #{lookup} is not registered on this site. Please check spelling or signup!"
end
end
我的問題是,在我的SessionsController
文件中定義了一個sessions_params
private
def session_params
params.require(:session).permit(:user_id,:auth_token)
end
我知道這意味着我必須使用一個會話對象或爲了從形式沿:user_id
通過自我將:user_id
定義爲會話屬性有效的參數。我想知道正確的方法來做到這一點。創建一個新的會話對象是沒有意義的,因爲這甚至不是我的模型,但是從參數中拿出它是否安全?
而改爲lookup = params[:user_id]
?
我明白爲什麼我需要其中一個或另一個我只是想知道哪個更安全。製作會話對象似乎比較安全,因爲我使用強參數,但創建會話對象也沒有意義,因爲它只是臨時存儲信息,而不是實際的模型。 – kittyminky 2014-09-19 02:36:27
即使它們不是模型,創建會話對象也是一種很好的做法。創建對象和進一步的會話資源意味着你可以爲你的會話設置一個RESTful控制器,這在Rails中是一個很好的練習(創建會話,銷燬會話等) – 2014-09-19 02:39:14
但是'session'已經是一個存在於Rails中的對象,爲什麼我會創建自己的臨時存儲信息?我的問題是發送控制器沒有明確定義的參數是否安全。 – kittyminky 2014-09-19 20:56:02