Cur*_*ind 5 authentication ruby-on-rails devise ruby-on-rails-3
我正在使用rails 3.2并设计2.1来创建一个多站点CMS
我一直在寻找并找到一些解决方案
$ rails generate devise admin
$ rails generate devise author
$ rails generate devise subscriberRun Code Online (Sandbox Code Playgroud)
但是这会产生以下错误
$ rails generate devise author
/home/gaurish/.rvm/gems/ruby-1.9.3-p286-perf/gems/devise-2.1.2/lib/devise/rails/routes.rb:443:in 'raise_no_devise_method_error!': Admin does not respond to 'devise' method. This usually means you haven't loaded your ORM file or it's being loaded too late. To fix it, be sure to require 'devise/orm/YOUR_ORM' inside 'config/initializers/devise.rb' or before your application definition in 'config/application.rb' (RuntimeError)
class Admin < User; end
class Author < User; end
class Subscriber < User; end
在这里,我不确定这将如何处理不同的登录/注册工作流程.订阅者示例我计划使用devise_invitable创建邀请.与作者和订阅者不同,管理员不需要基于子域的范围.
这看起来很复杂吗?我希望我能够很好地解释.
您不需要拥有三个单独的模型来构建此功能。您想要了解的是应用于一个用户模型的角色概念。
有一个 Gem 提供了这种功能,称为 Rolify,可以在https://github.com/EppO/rolify找到
这将允许您指定哪些用户属于哪些角色,并根据您认为合适的方式更改它们,所有这些都来自一个现有模型。
将角色附加到用户模型后,您可以覆盖 Devise 的注册控制器来检测角色并呈现不同的模板等。您可以通过以下方式执行此操作:
rails generate devise:views以将 Devise gem 中的视图解压到您的项目中创建您自己的注册控制器:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
# Add logic here to detect Role and display different forms
end
def create
super
end
def update
super
end
end
Run Code Online (Sandbox Code Playgroud)在routes.rb 文件中添加正确的设置,以告诉 Devise 使用新控制器:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5507 次 |
| 最近记录: |