加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将Devise与多个名称空间用于同一模型

发布时间:2020-12-17 04:18:46 所属栏目:百科 来源:网络整理
导读:我想使用具有两个名称空间的Devise:API名称空间和默认名称空间, 但是当用户尝试登录时,这两者似乎存在冲突. 意思是,任何引用Devise的命名空间最终都会出现 是最后的重定向地方.例如:如果我尝试创建一个新会话 在默认命名空间下,它将在该用户会话路径上失败
我想使用具有两个名称空间的Devise:API名称空间和默认名称空间,
但是当用户尝试登录时,这两者似乎存在冲突.
意思是,任何引用Devise的命名空间最终都会出现
是最后的重定向地方.例如:如果我尝试创建一个新会话
在默认命名空间下,它将在该用户会话路径上失败,
然后尝试在API / v1会话路径上创建会话.

如何让两者独立行动?

它们都引用了User对象. user_sessions控制器
默认名称空间是’user_sessions’. user_sessions
API / V1命名空间的控制器是’/ api / v1 / user_sessions’

---- ROUTES.RB -------
    MySite::Application.routes.draw do
    namespace :api do
   namespace :v1 do
     devise_for :users,:controllers => { :sessions => "api/v1/
user_sessions",:registrations=>"users" }
     ......
   end
 end
 devise_for :users,:controllers => { :sessions =>"user_sessions",:registrations=>"users" } do
    post 'users/sign_in' => 'user_sessions#create',:as => :user_session
    get 'users/sign_in' => 'user_sessions#new',:as => :new_user_session
    get 'users/sign_up' => 'user_sessions#new',:as => :new_user_session
    match 'users/sign_out' => 'user_sessions#destroy',:as => :destroy_user_session
    <.....>
 end

—– DEFAULT NAMESPACE USER_SESSIONS_CONTROLLER —–

class UserSessionsController < Devise::SessionsController
....
end
----

API NAMESPACE USER_SESSIONS_CONTROLLER —-(这是我在下面标注的自定义Devise基本控制器)

class Api::V1::UserSessionsController < Api::V1::DeviseBaseController
...
end

—- API NAMESPACE CUSTOM DEVISE BASE控制器—-

class Api::V1::DeviseBaseController < Devise::SessionsController
       respond_to :json
end

解决方法

我发现使用Devise是不可能的,你必须有一个登录/注销源.

清洁解决方案:为API和Web命名空间创建指向相同Devise控制器代码(例如/ user / sessions)的路由.在那里,调用partials以获得适当的响应(JSON,HTML).这些部分可以位于每个命名空间的视图目录中,保持干净.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读