0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

'devise'gem導入後、名前(name)とパスワードだけでログインするように実装したいが、ログインができない方に。エラー内容Unpermitted parameter

Posted at

この記事の内容

deviseをgemで導入し、デフォルトではemailとパスワードでログインしますが、名前とパスワードでログインする機能に変更してみました。ですが、ログインする事ができず、沼りましたので、備忘録として記事を上げました。解決策①は理屈がさっぱりわかりません‥。解決策②は、自分でも納得できたものになります。

付記

とにかく初心者です。記事の投稿も初めてです。Markdownもままなりません。優しくして下さい。

前提

deviseをgemでインストール済

解決前

他記事を参考に以下のように編集しました。(シンプルにnameでいいのですが、なぜか私はnicknameに統一しています‥。)

\config\initializers\devise.rb
config.authentication_keys = [:nickname] #49行目
\app\views\devise\registrations\new.html.erb
<div class="field">
  <%= f.label :nickname %><br />
  <%= f.text_field :nickname, autofocus: true, autocomplete: "nickname" %>
</div>
\app\controllers\application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email])
  end
end

原因の把握

このような形で実装した所、ログインができず…。ターミナルを確認した所、以下のようなエラーが…!(実際は赤色です)

Unpermitted parameter: :nickname

ログイン時にnicknameが上手く送信できていないのが原因みたいです‥。

解決策①

コード見直していた所、devise.rbに他にもemailの記載があったため、nicknameに変更してみました。

\config\initializers\devise.rb
config.case_insensitive_keys = [:email] #変更前 61行目
config.case_insensitive_keys = [:nickname] #変更後 61行目

config.strip_whitespace_keys = [:email] #変更前 66行目
config.strip_whitespace_keys = [:nickname] #変更後 66行目

この変更で、名前とパスワードだけで、ログインできるようになりました。理屈はわかりません‥。また、他記事に記載してあったのですが、61行目と66行目をコメントアウトしてもできるそうです。

解決策②

解決策①は一旦、忘れて下さい。こちらの方が正攻法?のような気がします。
nicknameがUnpermitted parameterというエラーが気になり、以下を試したところ、問題なくいけました。

\app\controllers\application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:nickname]) #←これを追記
  end
end

sign_up(新規登録時)と、sign_in(ログイン時)のキーになる名前を使い分ければいけなかったのかなと、理解することにしました。
解決策①でおこなった61行目と66行目のコードは変更前に戻しました。

最後に

今思えば、ストロングパラメーターのpermitの引数(特にsign_upとかsign_in)について理解していれば、解決できる内容でした。実は、この名前とパスワードでログインできないこの事象に、2日間悩まされました。
同じような事で、悩まれた方の手助けになっていれば幸いです。
そして、もっと良いコードの書き方などありましたら、ご教授いただけますと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?