如何使用Devise申请从可安装引擎验证所有路由并仅公开几个引擎路由?

时间:2015-12-12 11:08:05

标签: ruby-on-rails-4 authentication devise routes

如果我在mainapp/config/routes.rb上设置以下代码,则所有路由都需要身份验证,我将无法在我的控制器中使用before_action :authenticate_user!, except: [:mypublic_method]

Rails.application.routes.draw do
    devise_for :users

    authenticate :user do
        mount Myengine::Engine, at: '/myengine'
    end
end 

Rails似乎需要已安装的路由才能通过URL查看引擎。

如果我在mainapp/config/routes.rb上设置以下代码,则所有路线都是公开的,但我只想制作我想要的方法。

Rails.application.routes.draw do
    devise_for :users

    mount Myengine::Engine, at: '/myengine' 
end 

如何使用mypublic_method公开/可访问authenticate :user(vendor / engines / myengine / app / controllers / myengine / mycontroller_controller.rb)?

P.S。同样的问题以另一种方式How can I avoid Devise from requires authentication from within an engine?

  • ruby​​ 2.2.3p173
  • Rails 4.2.5
  • 设计3.5.3

谢谢。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这很简单。现在我在我的引擎应用程序控制器中进行身份验证,而不是在我的主应用程序控制器上进行身份验证。

module Myengine
    class ApplicationController < ActionController::Base
        before_action :authenticate_user!
    end
end

我还在config / routes.rb(主应用程序)

上删除了authenticate :user
mount Myengine::Engine, at: '/myengine'

这样我就可以在任何控制器中使用以下代码

before_action :authenticate_user!, except: [:mypublic_method]