- 浏览: 250018 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (237)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (1)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
来自:http://hlee.iteye.com/blog/673386
在上一篇的介绍Devise【视频,阅读】中,我们已经可以在我们的Rails应用中搭建和使用devise的基本功能了。现在,我们从上一篇介绍留下来的问题开始,来阐述如何定制devise。
在上一篇的介绍里,我们已经可以在rails项目里通过devise很容易的添加注册,登录和退出的功能:
访问限制
接下来,我们将实现限制访问。在我们这个应用中(译者注:我们开发的是一个简单的项目管理系统),就是对于创建,修改和删除项目进行权限控制,只有注册并且登录的用户才能有权操作。
我们通过在中ProjectsController添加一个before_filter,在其中调用devise提供的检查是否授权的方法authenticate_user!。这个方法会检查Project下的所有方法,如果,用户没有登录并且试图调用该方法的时候,就会跳转到登录页面。理论上讲,没有登录的用户也应该可以访问index和show方法,也就是说,我们还应该添加一个:except选项来保证用户可以正常方法上面两个方法:
- class ProjectsController < ApplicationController
- before_filter :authenticate_user!, :except => [:show, :index]
- def index
- #rest of class
那么现在,我们点击“New Project”链接,因为我们还没有登录,上面的访问限制就会其作用,页面会跳转到登录页面:
如果,我们仅仅是用来实现简单的是否登录的检查,那devise已经可以很好很简单的处理了。然而,如果我们的授权和访问控制很复杂(译者注:多角色,多用户,交叉权限等),这时我们需要额外的授权控制的插件来实现,比如我们在第192【视频,阅读】中介绍的CanCan一起使用,解决实际的业务需求。
定制Devise的页面显示
我们上209集就遗留一个问题,就是devise会自动为我们生成权限维护过程中的view,那么当我们需要页面的风格和我们的风格一致的时候,就需要自己来定制显示了。Devise也考虑到了这一点,提供了如下途径来解决这个问题。因为devise本身是基于Rails引擎的,只要覆盖原来的页面(实际是override原来的方法)就可以实现定制的要求了。同时devise提供了一个方便的generate方法用来生成这些用来重载的页面方法,如下:
- $ rails generate devise_views
- create app/views/devise
- create app/views/devise/confirmations/new.html.erb
- create app/views/devise/mailer/confirmation_instructions.html.erb
- create app/views/devise/mailer/reset_password_instructions.html.erb
- create app/views/devise/mailer/unlock_instructions.html.erb
- create app/views/devise/passwords/edit.html.erb
- create app/views/devise/passwords/new.html.erb
- create app/views/devise/registrations/edit.html.erb
- create app/views/devise/registrations/new.html.erb
- create app/views/devise/sessions/new.html.erb
- create app/views/devise/shared/_links.erb
- create app/views/devise/unlocks/new.html.erb
这个命令复制了所有devise中的页面,那么,也就是说我们只要编辑修改对应的页面和我们原来的项目风格一致。如下,是我们登录页面的代码:
- #/app/views/devise/sessions/new.html.erb
- <h2>Sign in</h2>
- <%= form_for(resource_name, resource, :url => session_path(resource_name)) do |f| %>
- <p><%= f.label :email %></p>
- <p><%= f.text_field :email %></p>
- <p><%= f.label :password %></p>
- <p><%= f.password_field :password %></p>
- <% if devise_mapping.rememberable? -%>
- <p><%= f.check_box :remember_me %> <%= f.label :remember_me %></p>
- <% end -%>
- <p><%= f.submit "Sign in" %></p>
- <% end %>
- <%= render :partial => "devise/shared/links" %>
我们会修改如下:
- #/app/views/devise/sessions/new.html.erb
- <% title "Sign In" %>
- <%= form_for(resource_name, resource, :url => session_path(resource_name)) do |f| %>
- <ol class="formList">
- <li><%= f.label :email %> <%= f.text_field :email %></li>
- <li><%= f.label :password %> <%= f.password_field :password %></li>
- <% if devise_mapping.rememberable? -%>
- <li><%= f.check_box :remember_me %> <%= f.label :remember_me %></li>
- <% end %>
- <li><%= f.submit "Sign in" %></li>
- </ol>
- <% end %>
- <%= render :partial => "devise/shared/links" %>
我们可以从上面的代码看到用在定制自己页面的时候,我们title的方法替换了header,这种修改页面的方法,我们在第30集【观看,阅读】也可以通过如下git gem来查询相关nifty generators。我们也可以看到我们还修改了,页面的布局用ol标签,加上一个formlist类,这样我们的css就其作用,原来简单的devise的界面,就能够变成我们需要的界面了。
定制错误提示信息
Devise处理错误信息的方式是把所有需要的信息都用i18n的方式保存在config/local目录下,这样就很容易修改和翻译。比如,当输入了错误的email和password的时候,会提示“invalid email or password”如果想要修改这个错误提示,只需要修改对应文件下的devise.failure.invalid错误提示:
- #/config/locales/devise.en.yml
- en:
- errors:
- messages:
- not_found: "not found"
- already_confirmed: "was already confirmed"
- not_locked: "was not locked"
- devise:
- failure:
- unauthenticated: 'You need to sign in or sign up before continuing.'
- unconfirmed: 'You have to confirm your account before continuing.'
- locked: 'Your account is locked.'
- invalid: 'OH NOES! ERROR IN TEH EMAIL!'
- invalid_token: 'Invalid authentication token.'
- timeout: 'Your session expired, please sign in again to continue.'
- inactive: 'Your account was not activated yet.'
- sessions:
- signed_in: 'Signed in successfully.'
- signed_out: 'Signed out successfully.'
- #rest of file omitted.
这时,当我们再登录并且输入错误的email地址时我们就会看到我们修改的错误提示了:
上面的是错误提示信息,那么,如果我们希望修改validation的验证错误提示呢,比如,在注册过程中不符合要求的字段提示信息,如下:
针对validation Devise有一个配置文件,在/config/initializers/ devise.rb文件中,这个文件保存了很多和devise相关的配置信息。这些配置选项有很好的文档注释,以便容易找到对应的选项并且做出修改。那么,如果我们想要把口令的最小长度从原来的6位减少到4位,那么,只需要去掉对应的注释,并修改对应的配置选项。值得注意的是,修改完配置文件后,需要重启server才能够加载生效。
- #/config/initalizers/devise.rb
- # ==> Configuration for :validatable
- # Range for password length
- # config.password_length = 6..20
如果,我们的验证信息更复杂,devise的选项根本没有办法满足,那么我们也可以通过去掉devise的validatable模块,并且自己在User model中添加自己的验证信息的方式来添加自己的独特定制验证信息。
- #/app/models/user.rb
- class User < ActiveRecord::Base
- # Include default devise modules. Others available are:
- # :token_authenticatable, :lockable, :timeoutable and :activatable
- # :confirmable,
- devise :database_authenticatable, :registerable,
- :recoverable, :rememberable, :trackable, :validatable
- # Setup accessible (or protected) attributes for your model
- attr_accessible :email, :password, :password_confirmation
- end
我们可以看到在User的描述中devise方法有很多参数(译者注:就是devise的11个功能模块是否使用的配置。)其中,:validatable就是用来实现注册过程的字段验证的。如果,我们希望自己定制这些字段检查,那么我们就需要先去掉这个:validatable的描述,然后,在User中添加自己需要的字段验证,虽然,devise允许这样自己定制。然后,大部分的情况devise提供的字段验证已经可以处理
路由
定制路由,是说例如devise默认注册页面在/users/sign_up但是比如,我们想要改到/register。实际上默认的devise路由是通过router.rb中的devise_for :users提供的。当然,这些路由devise也提供了修改途径:
- #/config/routes.rb
- ProjectManage::Application.routes.draw do |map|
- devise_for :users
- resources :projects
- root :to => 'projects#index'
- end
比如上面的需求,我们可以通过添加path_names的参数达到,如下:
- #/config/routes.rb
- ProjectManage::Application.routes.draw do |map|
- devise_for :users, :path_names => { :sign_up => "register" }
- resources :projects
- root :to => 'projects#index'
- end
当我们完成上面的修改之后,当我们再试图通过/users/sign_up来注册的时候就会看到没有路由的错误信息,而通过/users/register就可以正常注册。对于devise_for的路由还有很多其他的参数来帮助定制路由,这可以通过参考devise的文档得到。
定制登录信息
当前devise的配置是通过用户email和用户口令登录。那么,很可能有些项目需要用用户名登录,devise也考虑到了这点,通过简单的配置就可以转换成用户名登录。
首先,要用用户名登录就得先增加一个username的字段
因为当前我们只有一个用户,所以,我们不用谢migrate去处理之前没有username字段的数据,只要在控制台简单的修改一下就可以:
- $ rails c
- Loading development environment (Rails 3.0.0.beta2)
- ruby-1.8.7-p249 > User.first.update_attribute(:username, "eifion")
- => true
修改完数据库,已经有登录字段了,那么接着,我们要修改对应的配置文件/config/initializers/devise.rb来指明用不username登录。就是修改config.authentication_keys把 :email 变成 :username:
这个配置的修改就可以通过username字段来验证登录,当然我们还应该修改/app/views/devise/sessions/new.html.erb页面,以便输入的字段也使用用户名。
- #/app/views/devise/sessions/new.html.erb
- <% title "Sign In" %>
- <%= form_for(resource_name, resource, :url => session_path(resource_name)) do |f| %>
- <ol class="formList">
- <li><%= f.label :username %> <%= f.text_field :username %></li>
- <li><%= f.label :password %> <%= f.password_field :password %></li>
- <% if devise_mapping.rememberable? -%>
- <li><%= f.check_box :remember_me %> <%= f.label :remember_me %></li>
- <% end %>
- <li><%= f.submit "Sign in" %></li>
- </ol>
- <% end %>
- <%= render :partial => "devise/shared/links" %>
注册页面的表单也需要进行相关的修改,以便注册时能够添加用户名,当然对于的输入类型验证也应该包括用户名。和登录的表单类似就不展示了。
当完成以上的配置修改之后,重启服务器我们就可以通过用户名登录了:
这就是定制devise的内容了,通过上面的介绍,我们可以看到Devise是个相当完善的Rails权限管理系统,既有很好的默认配置,也支持灵活的定制。
发表评论
-
OpenSSL功能集合
2020-04-22 18:59 440OpenSSL中算法记录 1、证书(X.509证书 ... -
Aliyun-OSS 使用 - 图片持久化
2020-03-03 13:04 544Aliyun OSS 使用 - 图片持久化 参考:ali ... -
Sign in with Apple REST API (Rails)
2020-02-28 12:30 1105# 文档(Apple授权登录) https://deve ... -
RQRCode插件使用
2019-03-07 15:08 324def config { le ... -
gems 列表(rails 插件) 二
2014-11-19 19:41 491rails_best_practices 最佳实现 new ... -
rails 利用 Spreadsheet 导出xls格式数据
2014-10-08 17:22 7171、链接 XXX_path(forma ... -
rvm 使用记录
2014-09-26 11:11 611rvm是一个命令行工具,可以提供一个便捷的多版本ruby环 ... -
rails3内置gem包
2014-09-10 13:14 500rails3内置gem包: ... -
rails mongoid + carrierwave
2014-06-13 18:11 650中间插件:gem 'carrierwa ... -
rails 错误提示样式
2014-06-11 10:20 521源码 # Specify the proc us ... -
ROR Callbacks函数
2014-05-13 16:49 481Active Record Callbacks: ## ... -
字符串与对象的转化
2014-03-06 10:51 699classify: http://apidock.com/ ... -
nginx+unicorn+rails 配置文件
2014-02-17 14:43 629nginx+unicorn+rails 配置文件 ... -
ruby 里的正则表示
2014-01-22 17:27 0# ruby 中的正则表示 ... -
rails中Elasticsearch的客户端Tire配置
2014-01-22 15:25 1169$ gem install tire || http ... -
rails 多表关联
2013-12-09 16:28 0rails 多表关联 class Post < ... -
rails 测试 Rspec
2013-11-14 13:32 0在Gemfile中加入: group :test, ... -
rails 评论/回复插件 acts_as_commentable_with_threading
2013-11-13 19:04 1223acts_as_commentable_with_thre ... -
rails Rspec测试框架
2013-11-03 17:46 649Rspec rails的测试框架 ... -
rails 配置详解
2013-09-16 17:05 1248配置文件(config) 在Rails中,可以 ...
相关推荐
7. **config/initializers/devise.rb**: devise的配置文件,可以在这里定制化devise的行为,包括OpenID设置。 8. **public/openid/**: 可能存放了OpenID连接所需的静态文件。 9. **spec/** 或 **test/**: 测试目录,...
Devise提供了一些默认的视图模板,但你可能希望自定义这些视图以适应Noodall的UI。这些模板通常位于`app/views/devise`目录下。 8. **权限管理** Devise不直接处理角色和权限,但可以通过添加如cancancan或pundit...
4. **链接助手**: 这个压缩包可能包含了自定义的 Devise 链接辅助方法,这些方法可以帮助开发者在视图中方便地生成登录、注册和注销链接。例如,`devise_helper` 可能包含了 `new_user_session_path` 和 `new_user_...
- Rails Admin的基本使用,包括模型配置、定制视图和控制器。 - 如何在Rails应用中扩展和自定义Devise和Rails Admin的行为。 - Ruby编程基础,以及Rails框架的核心概念,如路由、控制器、视图和模型。 - 测试驱动...
- `initializers/devise.rb` - Devise的初始化配置,可以定制化Devise的行为。 3. `db` - 数据库相关的文件,如迁移(migrations)和配置。 - `migrate` - 迁移文件,用于创建或修改数据库表结构,包括Devise的...
如果您之前已经做到了这一点,你需要重新生成您的意见(见下面的“自定义视图”),然后再涂什么使你在第一时间做到这一点定制。设定地区您将需要按照《 中的说明在应用程序中设置语言环境。 如果要设置每个请求的...
Devise是一个强大的、易于定制的Rails gem,用于处理用户认证。它包含了常见的认证功能,如密码重置、确认电子邮件、记住我等。Devise通过模型、控制器、视图以及会话来管理用户的登录、注册和注销过程。它使用...
运行如`rails generate devise Admin`的命令来为每个模型生成Devise所需的迁移、控制器和视图。 接下来,配置数据库中的表。运行`rake db:migrate`来执行迁移,创建用户表,其中包含Devise默认的字段,如`email`、`...
项目可能包含了Devise的定制视图和控制器,以适应特定的用户体验或业务逻辑。 6. **路由配置**:Rails的routes.rb文件定义了URL到控制器之间的映射。Devise会添加一些默认路由,如用户登录、注册和注销等。 7. **...
Devise通过一组可插入的模块化组件来实现这些功能,允许开发者根据需求定制身份验证流程。在这个示例中,Devise可能被用来实现用户注册、登录和权限管理,确保只有经过身份验证的用户才能访问特定资源。 Rhodes是...
在Rails应用中,Devise通过模型、控制器、视图和路由来工作,提供了一套完整的、可定制的身份验证流程。 在Rails中,身份验证通常涉及到以下关键概念: 1. **模型(Model)**:Devise在你的应用中创建一个或多个...
此引擎还包含了美观的仪表板、管理面板以及定制的登录视图,旨在帮助开发者快速启动新项目。 **描述详解:** "PHCDevworks帐户" 是一个专门针对用户账户和管理的Rails设计,它构建了一个强大的基础框架,允许...
根据需要定制Devise的视图和控制器,以适应你的应用设计。 9. **测试和调试**: 完成以上步骤后,启动Rails服务器并进行测试,确保用户可以正常地通过Radius服务器进行认证。 通过以上步骤,你的Rails应用现在...
5. **Controllers and Views**:Devise_invitable 提供了默认的控制器和视图,但你可以根据需求自定义。比如,可以修改发送邀请的邮件模板,或者改变邀请确认后的跳转页面。 6. **Invitation Lifecycle**:邀请流程...
这个实现可能包括了与NemID服务接口的代码,以及如何将Devise的默认行为定制以适应NemID认证流程。开发者可能需要配置NemID的API密钥,设置回调URL,并处理NemID返回的认证结果。同时,CSS文件将确保用户界面与丹麦...
"Devise-views" 提供了定制 Devise 的视图模板的能力,以便更好地融入应用的外观和感觉。此外,"devise-token-auth" 为移动和 API 客户端提供了基于令牌的认证,适应了现代跨平台项目的需求。 数据库方面,"sqlite3...
在"railsfriends"项目中,开发者可能已经集成了Devise,实现了用户注册、登录、注销等功能,同时也可能对Devise的默认行为进行了定制,以满足好友清单应用的具体需求。通过这个项目,初学者可以深入了解Rails的MVC...
12. **社区与工具**:Rails拥有活跃的开发者社区,提供了许多有用的gem(Ruby的库),如Devise用于身份验证,Pundit或CanCanCan处理权限管理。 通过学习《应用Rails进行敏捷Web开发·第三版》,开发者不仅能掌握...
4. **字段选择**:在定制的行政资源文件中,可以指定哪些字段应显示在列表视图和表单中。 5. **排序与过滤**:Administrate允许开发者轻松添加排序和过滤选项,以便管理员可以更有效地浏览和搜索数据。 6. **...
如果`rails.exe`是一个定制的Rails开发环境,可能包含了预配置的数据库连接、 gems(如Devise)和示例代码,帮助开发者快速搭建登录系统。通过运行这个工具,用户可以跳过一些基础设置,直接进入开发阶段。 总结...