2016-11-09 11 views
0

私が計算したユーザ名でdeviseを使ってログインを作成しようとしています。たとえば、ユーザー名の名前空間を設定し、ログインフォームからユーザー名を受け取り、namespaced_usernameを使用して実際の認証を行うとします。計算/操作されたユーザ名パラメータでログインする

だから私のUser::SessionsController#createに、私が持っているかもしれません:

def create 
    params[:user][:namespaced_username] = "namespace/#{params[:user][:mobile_number]}" 
    super 
end 

を考案は、(初期化子またはモデル自体のいずれかでauthentication_keysで構成)namespaced_usernameのリスニング、およびnamespace/usernameなどのユーザー設定とされていても、私はまだ教えてくださいInvalid Namespaced username or password is not valid

私は新しいパラメータを読むためにdevise(具体的な管理戦略)を取得するにはどうすればよいですか?

答えて

0

これはRails 5の問題です。基本的に、Warden(デベロッパによって使用される)は、おそらくミドルウェア内の要求オブジェクトを渡され、コントローラには要求のparamsハッシュのコピーが渡されます。 User::SessionsController#create以内に、我々は行を追加する必要があり

それを修正する簡単な方法があり、:

def create 
    # Here we change params - but this won't be seen by the warden strategy 
    params[:user][:namespaced_username] = = "namespace/#{params[:user][:mobile_number]}" 
    # Inject our changes into the copy in request 
    request.params[:user].merge!(params[:user]) 
    # now our changes will be seen by warden - continue with devise: 
    super 
end 
関連する問題