Rails devise-jwt会话存储

问题描述

devise-jwt gem文档说,如果启用了会话存储,则必须跳过它进行jwt身份验证。它说您应该在devise.rb上设置:

config.skip_session_storage = [:http_auth,:params_auth]

并且您应该禁用:database_authenticatable。这部分我完全不了解。如果在我的用户模型中删除了:database_authenticatable,则配置用于登录的路由不可用:

ActionController :: RoutingError(没有路由与[POST]“ / login”匹配):

User.rb

class User < ApplicationRecord
  rolify role_join_table_name: 'public.user_roles'
  # Include default devise modules. Others available are:
  # :confirmable,:lockable,:timeoutable,:trackable and :omniauthable

  # devise :database_authenticatable,devise :registerable,:recoverable,:rememberable,:validatable,:jwt_authenticatable,jwt_revocation_strategy: Devise::JWT::RevocationStrategies::Null
end

devise.rb

config.skip_session_storage = %i[http_auth params_auth]

routes.rb

Rails.application.routes.draw do
  # For details on the DSL available within this file,see https://guides.rubyonrails.org/routing.html

  devise_for :users,defaults: { format: :json },path: '',path_names: {
                       sign_in: 'login',sign_out: 'logout',registration: 'signup'
                     },controllers: {
                       sessions: 'users/sessions',registrations: 'users/registrations'
                     }
end

我应该怎么做才能保持会话状态,而不是jwt auth?

解决方法

嗯,在适应了我在本文https://blog.siliconjungles.io/devise-jwt-with-sessions-hybrid中找到的解决方案之后,答案如下:

monkeypatch:config / initializers / warden / proxy.rb

module Warden
  class Proxy
    def user(_argument = {})
      if request.format.json?
        return nil
      end
    end
  end
end

并且您必须具有用于api身份验证和默认行为的单独路由:

routes.rb

namespace :api do
    namespace :v1 do
      devise_scope :user do
        post 'auth/signup',to: 'registrations#create'
        post 'auth/signin',to: 'sessions#create'
        delete 'auth/signout',to: 'sessions#destroy'
      end
    end
  end

  devise_for :users

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...