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 3 years have passed since last update.

rails6 devise⇨ sign_in, sign_upのコントローラの設定

Posted at

環境

・Ruby 2.7.3
・rails 6.1.3
・docker

現状把握

⇨下記のよう、新規登録はのURLは出るかつ登録後も正常に指定した遷移先へ行く。
⇨コントローラで指定しているとおり。
http://localhost:5000/users/sign_up

##ログアウト
⇨ログアウトを押してもログアウトの遷移先へ行かない。かつログイン者はログアウト出来ているかわからない。button_toでも正常に動かない。なぜか?

⇨ログアウトの遷移先はログインページへ指定している。(new_user_session_path)
 ⇨試しに。元の状態へ。(super)
  ⇨これでログアウトすると、rootで指定しているところへ。かつ以下のエラー。

http://localhost:5000/
NoMethodError in Posts#index
undefined method `id' for nil:NilClass

⇨ならばrootを指定していなかったら、どこへ?
 ⇨何も変わらずに、遷移しない。ログアウトしているかわからない。
  ⇨また、コントローラで指定はしている。(new_user_session_path)

ログアウトの遷移先を調べる。
以下の記事で解決。
https://qiita.com/Tatty/items/a9759755e562ac4693ec

実装はこのように。ログアウト後の遷移先はログインページに指定している。

#def destroy
	#new_user_session_path
#end

#上記で設定してもうまくいかなかった。

def after_sign_out_path_for(resource)
  new_user_session_path
end

⇨遷移は出来ているが、遷移先で以下のようなエラー。
http://localhost:5000/users/sign_in

ArgumentError in Users::Sessions#new
Showing /app/app/views/devise/sessions/new.html.erb where line #20 raised:

First argument in form cannot contain nil or be empty
Extracted source (around line #20):

  <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
    <div class="form-group has-icon">
      <label class="control-label sr-only" for="inputEmail"><%= f.label :email %></label>
      <%# <input type="text" class="form-control" id="inputEmail" placeholder="メールアドレス"> %>

解決

新しいformの書き方で解決しました。
記事を参照⇨https://qiita.com/wonder_meet/items/fac07af1edcd79ad102a

<%#= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
⬇︎
<%= form_with model: @user, url: user_session_path, local: true do |f| %>

以前のよりもシンプルになりわかりやすい。

ログイン出来るか試した。

⇨結果止まった。遷移先のURLにも変わらず、止まった。
 ⇨以下の形で指定してみる。
  ⇨遷移出来た!!!

app/controller/users/sessions_controller.rb

# GET /resource/sign_in
  #  def new
  #   posts_path
  #  end

  # POST /resource/sign_in
  #  def create
  #   posts_path
  #  end

#上記で設定してもうまくいかなかった。

#ログイン後のリダイレクト先
def after_sign_in_path_for(resource)
  posts_path
end

コードに書いているとおり(#上記で設定してもうまくいかなかった。)
あの部分に指定しても動きませんでした。

何か役に立てばと思います。
ありがとうございました。

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?