前提・実現したいこと
railsでQAサイトを作っています。
deviseでuserモデルを作成しユーザー編集画面を作っていますが更新したときになぜかサインアウトしてしまいます。
上記のようにログインが切られログイン画面に遷移してしまいます。
最初はdeviseのデフォルトで使える/app/views/devise/registrations/edit.html.erb
で作成していましたが現在は自分で新しくビューを作成しapp/views/users/edit.html.erb
でユーザー編集画面を作っています。コントローラーも新しく作成しました。詳細は以下に記述しています。
関連しそうなソースコード
#####app/views/users/edit.html.erb
<div class="container mt-5"> <div class="row"> <div class="col-6 mx-auto"> <h2>編集</h2> <%= form_with(model: @user, local: true) do |f| %> <div class="form-group"> <label>ユーザー名</label> <%= f.text_field :username, class: "form-control"%> </div> <div class="form-group"> <label>メールアドレス</label> <%= f.text_field :email, class: "form-control"%> </div> <div class="form-group"> <label>自己紹介文</label> <%= f.text_field :profile, class: "form-control" %> </div> <div class="form-group"> <label>パスワード</label> <%= f.password_field :password, autocomplete: "new-password",class: "form-control" %> </div> <div> <%= f.submit class: "btn btn-success" %> </div> <% end %> </div> </div> </div>
#####app/controllers/users_controller.rb
def show @user = User.find(params[:id]) if @user != current_user redirect_to root_url end end def edit @user = current_user end def update @user = current_user if @user.update(user_params) redirect_to questions_path, notice: 'ユーザー情報を更新しました' else render :edit end end private def user_params params.require(:user).permit(:username, :email,:password,:profile) end
#####app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? before_action :authenticate_user! def after_sign_in_path_for(resource) questions_path end def after_sign_up_path_for(resource) questions_path end def after_sign_out_path_for(resource_or_scope) new_user_session_path end protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :image]) devise_parameter_sanitizer.permit(:account_update, keys: [:username,:image,:profile]) end end
####app/views/devise/registrations/new.html.erb(ログインページのコード)
<h2>Sign up</h2> <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <div class="field"> <h7>名前</h7><br> <%= f.text_field :username %> </div> <div class="field"> <h7>メールアドレス</h7><br> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="field"> <h7>パスワード(6文字以上)</h7><br> <%= f.password_field :password, autocomplete: "new-password" %> </div> <div class="field"> <h7>確認用パスワード</h7><br> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> </div> <div class="actions"> <%= f.submit "Sign up" %> </div> <% end %> <%= render "devise/shared/links" %>
####app/controllers/users/sessions_controller.rb(deviseのコントローラ)
# frozen_string_literal: true class Users::SessionsController < Devise::SessionsController # before_action :configure_sign_in_params, only: [:create] # GET /resource/sign_in # def new # super # end # POST /resource/sign_in # def create # super # end # DELETE /resource/sign_out # def destroy # super # end # protected # If you have extra params to permit, append them to the sanitizer. # def configure_sign_in_params # devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute]) # end end
####routes.rb
Rails.application.routes.draw do devise_for :admin_users, ActiveAdmin::Devise.config ActiveAdmin.routes(self) resources :reactions get 'answers' => 'answers#index' resources :questions, shallow: true do resources :answers, shallow: true do resources :reactions end end devise_for :users, controllers: { omniauth_callbacks: 'omniauth_callbacks' , registrations: 'users/registrations', sessions: 'users/sessions' } get 'users/show', to: 'users#show' resources :users resource :user, except: [:new, :create, :destroy] root 'questions#index' get 'pages/index' get 'pages/show' get 'questions', to:'questions#index' end
試したこと
どこかでログアウトしてしまうコードがないか一通り見てみましたが見つかりませんでした。
また、色々検索しては見ましたが該当する物が見つかりませんでした。
追記
足りない情報などがあれば申し付けください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/21 15:27
2021/03/21 15:41
2021/03/21 16:14
2021/03/22 06:16