【问题标题】:Get current user in Devise custom session controller在设计自定义会话控制器中获取当前用户
【发布时间】:2020-11-14 18:10:16
【问题描述】:

我已经在这里找到了同样的问题:How can I get current_user in Devise SessionsController#destroy,但这不起作用,因为我没有 50+ 的声誉,我不能要求回答这个问题的人

Ruby 版本:'2.6.5',Rails 版本:'6.0.3.2'

这是会话控制器:

# frozen_string_literal: true

include Devise::Controllers::Helpers
class Users::SessionsController < Devise::SessionsController
  # skip_before_action :authenticate_user!
  # before_action :configure_sign_in_params, only: [:create]
  before_action :get_current_user, only: [:destroy]

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

  # POST /resource/sign_in
  def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message!(:notice, :signed_in)
    sign_in(resource_name, resource)
    if !session[:return_to].blank?
      render json: { logged: false }
    else
      render json: { logged: true, user: current_user }
    end
  end

  # DELETE /resource/sign_out
  def destroy
    p "xxxxxxxxxxxxxxxxxxx"
    p current_user # Nil
    puts current_user # returns empty
    p "xxxxxxxxxxxxxxxxxxx"
    # super
  end

  protected

  def get_current_user
    p current_user # nil
  end

  # 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

路线文件:

Rails.application.routes.draw do
  get 'show/users', to: 'development#index' 
  get 'show/:id', to: 'development#show'
  delete 'delete/:id', to: 'development#destroy'
  
  get 'login', to: 'login#index'
  get 'sign_up', to: 'register#index'

  devise_for :users, controllers: {
    registrations: 'users/registrations',
    sessions: 'users/sessions'
  }
  root 'home#index'
end

我的要求:

  axios
    .delete("http://localhost:8081/users/sign_out")
    .then((resource) => {
      console.log(resource);
      // window.location = "/";
    })
    .catch((error) => {
      console.log(error);
    });

我希望 current_user 能够注销已登录的用户

【问题讨论】:

标签: ruby-on-rails ruby session devise


【解决方案1】:

我设法让它工作。

在 devise.rb (project-folder/config/initializers) 中,我更改了:

config.sign_out_via = :delete

到:

config.sign_out_via = :get

当然,我必须将请求更改为 .get

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多