`

device登录认证插件2

 
阅读更多
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://kinda22.blog.51cto.com/2969503/1587991

在一个Rails项目中安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#在Gemfile中添加,目前版本3.4.1
gem 'devise'
 
#然后只需bundle install 安装它..
bundle install
 
#初始化devise
rails generate devise:install
 
#创建一个MODEL,指定名称..
rails generate devise user
 
#会生成一个迁移文件,可以对这个迁移文件做一些修改...
rake db:migrate

 

    配置开发环境默认的url..

1
2
3
4
#在开发环境中默认的url和生产环境可能有点不太一样..
#在下面development的文件中,增加下面的一行。
config/environments/development.rb 
     config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

 

 

 

控制器过滤和helpers

    Devise创建了一些helpers在你的控制器和视图中

    建立与用户身份验证相关的控制权,只需要添加 before_action(假设你的用户模型是user)

1
before_action :authenticate_user!

    如果你的devise model不是user,替换"_user" 到 "_yourmodel", 同样的逻辑也适用于下面的命令.

 

 

    验证用户是否登录

1
user_signed_in?

 

    当前登录的用户

1
current_user

 

    你可以访问的会话范围

1
user_session

 

    在一个用户注册后,确认账号或更新密码,Devise将重定向一个作用域到根路径

    例如:当使用一个 :user 资源,user_root_path如果存在,将会使用它。否则将使用默认的root_path

    这个root_path,是在你的routes中定义的

1
  root to: "home#index"

    你也可以覆盖 after_sign_in_path_for 和 after_sign_out_path_for 到你自定义重定向的钩子

 

    注意:如果你的Devise model是member 不是user,例如:可用的帮助方法。。。

1
2
3
4
  before_action :authenticate_member!
  member_signed_in?
  current_member
  member_session

 

 

 

配置模型

    Devise在你的models中也可以支持一些选项来进行配置

    例如:你可以选择加密算法的开销

1
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 2

    除了 :stretches, 你可以定义 :pepper ,  :encryptor ,  :confirm_within ,  :remember_for ,  :timeout_in ,  :unlock_in 。更多细节,你可以查看在 devise:install 时创建的初始化文件中 位置在

1
 config/initializers/devise.rb

 

 

 

健壮参数

    当你自定义你的视图时,你最总会向表单添加新属性。在Rails4中移除了从模型控制器的参数处理

    这里只有三个动作在Devise,允许任何的设置的参数被传递到模型中,所以需要被处理。

    它们的名字和默认情况下允许的参数是:

1
2
3
sign_in (Devise::SessionController#create)           只允许验证的keys(类似email)
sign_up (Devise::RegistrationsController#create)          允许验证的keys: password和password_confirmation
account_update (Devise::RegistrationsController#update)          允许验证的keys: password , password_confirmation 和 current_password

      

    如果你想允许额外的参数,你可以使用一个简单的过滤器 before_action 配置在你的控制器

1
2
3
4
5
6
7
8
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?
 
  protected
 
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  endend

    上面的代码是简单的类型上添加多个字段的参数。但是如果你有一个嵌套的属性(你应该使用accetps_nested_attributes_for), 然后你要告诉Devise那些是嵌套和类型。Devise允许你完全的改变默认的设计或自定义。

    允许简单的标量值的username和email。列如:

1
2
3
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email) }
end

 

     如果你有一些复选框,表示用户需要选择。浏览器会把那些复选框作为一个数组。这数组不是一个强壮参数允许的标量,所以需要配置Devise使用下面的方式:

1
2
3
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation) }
end

 

     如果你有多个Devise模型,可能想要建立一个不同参数处理的模型。

     既然这样,推荐继承 Devise::ParameterSanitizer 到你的逻辑中.

1
2
3
4
5
class User::ParameterSanitizer < Devise::ParameterSanitizer
  def sign_in
    default_params.permit(:username, :email)  
  end
end

    然后配置你的控制器使用它:

1
2
3
4
5
6
7
8
9
10
class ApplicationController < ActionController::Base
  protected
 
  def devise_parameter_sanitizer
    if resource_class == User
      User::ParameterSanitizer.new(User, :user, params)    else
      super # Use the default one
    end
  end
end

    上面的例子覆盖用户允许参数 :username 和:email

 

 

 

配置视图

    Devise是一个引擎,所有的视图被打包在gem中。这些视图讲帮助你开始,但是一段时间后你可能需要求修改它们。如果是这种情况,你只需要通过下面的generator,并将所有视图复制到你的应用程序

1
rails generate devise:views

 

    如果你有超过一个Devise模型在你的应用(比如 user 和 admin),你将会发现所有的模型使用相同的视图。非常庆幸,Devise提供了一种简单的方法来定制视图。你需要配置 config.scoped_views = true 在config/initializers/devise.rb文件中。

    

    配置完之后,你将会有基础视图在这样的角色 usrs/sessions/new 和 adminssessions/new. 如果没有在这个范围内找到视图,Devise将会使用默认的视图devise/sessions/new 

  

    你还可以使用生成器,生成视图。

1
rails generate devise:views users

 

    如果你想生成几个视图,比如只想要 registerable 和 confirmable 模块,你可以通过使用 -v标记在一个模块列表生成

1
rails generate devise:views -v registrations confirmations

 

 

 

配置控制器

    如果定制视图的级别不够,你可以通过以下步骤定制每个控制

    1. 使用生成器创建控制器

1
rails generate devise:controllers [scope]

 

        如果你指定users为范围,控制器会被创建在 app/controllers/users/ 会话控制器看着像这样...

1
2
3
4
5
6
7
class Users::SessionsController < Devise::SessionsController
  # GET /resource/sign_in
  # def new
  #   super
  # end
  ...
end

 

    2. 告诉路由使用这个控制器

1
    devise_for :users, controllers: { session: "users/sessions"}

 

    3. 拷贝视图从devise/sessions 到 users/sessions. 因为控制被改变,它不能使用默认的视图位置 devise/sessions

 

    4. 最后,改变或扩展控制器的操作。

        你可以完全覆盖一个控制器动作

1
2
3
4
5
class Users::SessionsController < Devise::SessionsController
  def create
    # custom sign-in code
  end
end

 

        或者你可以简单的添加新行为:

1
2
3
4
5
class Users::SessionsController < Devise::SessionsController
  def create
    super do |resource|      BackgroundWorker.trigger(resource)    end
  end
end

        这是用于触发后台左右或操作日志事件..

 

    记住,Devise使用flash 消息来让用户知道登陆成功或失败,Devise期望你的应用程序的情况调用flash[:notice] 和flash[:alert]。不要打印整个flash hash,只打印特定的keys。在某些情况下,Devise 添加一个 :timeout 的key在flash hash,这个不是用来显示的。如果你想打印整个hash,记得将这个key删除。

 

 

配置路由

    Devise附带默认路由。如果你需要定制它们,你应该通过devise_for方法去定义。它接受几个选项  :class_name , :path_prefix 等等,可能包括i18n改变的路径名

1
devise_for :users, path: "auth", path_names: { sign_in: 'login', sign_out: }

    一定要检查devise_for 文档的细节

 

    如果你需要更多的深度定制,例如也允许 “/sign_in” 之外 "/users/sign_in",你所要做的就是创建一个正常的路由将它包裹在devise_scope路由器中

1
2
3
devise_scope :user do
  get "sign_in", to: "devise/sessions#new"
end

    这种方式,你告诉Devise使用的范围在 :user  当 "/sign_in"  被访问。注意devise_scope也类似你的路由器别名

 

 

I18N

    Devise使用fluash消息在i18n,并结合flash keys的 :notice 和 :alert。 定制你的应用,你可以设置本地文件..

1
2
3
4
en:
  devise:
    sessions:
      signed_in: 'Signed in successfully.'

 

    你可以配置基于资源的信息,在你的配置中使用单数的名字..

1
2
3
4
5
6
7
en:
  devise:
    sessions:
      user:
        signed_in: 'Welcome user, you are signed in.'
      admin:
        signed_in: 'Hello admin!'

 

    Devise mailer使用模式匹配创建主题信息

1
2
3
4
5
6
7
8
en:
  devise:
    mailer:
      confirmation_instructions:
        subject: 'Hello everybody!'
        user_subject: 'Hello User! Please confirm your email'
      reset_password_instructions:
        subject: 'Reset instructions'

 

本文出自 “晓风残月” 博客,请务必保留此出处http://kinda22.blog.51cto.com/2969503/1587991

分享至  
分享到:
评论

相关推荐

    Rails3 device and cancan

    标题《Rails3 device and cancan》与描述《ROR ruby on rails device plugin教程》指出本文是关于如何在Rails 3.2应用程序中整合Devise认证插件和Cancan授权插件的教程。Devise是一个流行的Ruby on Rails的认证解决...

    UE4 电脑ID和获取插件

    2. 将解压得到的“DeviceID”文件夹复制到你的UE4项目的“Plugins”目录下。 3. 启动UE4编辑器,插件管理界面会自动检测到新添加的插件。确保插件已启用,并根据需要选择是否在编辑器和打包的游戏运行时使用。 4. 在...

    html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】

    电脑和手机移动端都适用的jQuery拖动滑块图片拼图验证码插件,通过鼠标拖动或触屏滑动填充拼图来进行安全验证,点击刷新可以更换当前待验证的图片。 HTML & css: &lt;!DOCTYPE html&gt; &lt;html lang="zh"&gt; &lt;...

    CarPlay_apple_carplay_iap2

    2. **设备认证(Device Authentication)**:iap2协议包含一套完整的设备认证流程,确保只有经过苹果认证的CarPlay兼容设备才能与iPhone建立连接。这一机制增强了系统的安全性,防止了恶意软件的侵入。 3. **配件...

    ASDM使用手册

    - **Device Management**: 登录管理、许可管理、自动升级等功能。 - **虚墙模式/透明模式**: 在这一模式下,ASDM提供类似的配置选项,但界面和功能可能有所不同,以适应透明模式下的特殊需求。 #### 五、高级配置...

    convoy.tar.gz convoy插件 存储插件

    目前,Convoy 支持多种存储驱动,包括本地文件系统、Rados Block Device (RBD)、GlusterFS、NFS、Amazon EBS 和 Google Compute Engine Persistent Disks 等。选择合适的驱动取决于你的具体需求和现有的基础设施。 ...

    8点输入8点输出DEVICENET现场模块FDNL-S0808I-MM.pdf

    根据文件内容,此文档描述了一个特定的工业通讯模块FDNL-S0808I-MM,该模块具备8点输入和8点输出功能,适用于DEVICENET现场总线网络。本文将深入解析该模块的特点、应用场景、技术规格等关键知识点。 知识点一:...

    silicon新建网关工程补充说明1

    在本文中,我们将深入探讨如何在Silicon框架中新建网关工程,并着重关注"Plugin"目录下的`device-table`插件及其相关功能。这个过程主要涉及到C#编程语言,因此对于熟悉C#开发者来说,理解这些概念至关重要。 首先...

    Aperio_all_logs_2A35_162697_202103301059_FFDDD_

    2. **Device_info_2A35_162697_202103301059.txt**:设备信息文件提供了关于Aperio设备的详细数据,如设备型号、固件版本、安装位置等。这些信息对于故障排查、设备管理和系统优化是必要的。 3. **Event_log_2A35_...

    docker-volume-ceph-rbd:一个Docker Volume插件,可将Ceph RBD用作分布式数据存储

    然后,需要配置插件连接到Ceph集群,包括设置RBD池名、Ceph集群的认证信息等。一旦配置完成,就可以在创建Docker容器时指定使用这个插件创建Volume,例如: ```bash docker run -v myvol:rbd://pool/myvol --volume...

    iot_device:可配置的NodeJS微服务基础结构,可轻松管理IOT定制设备

    ### 2. 微服务架构 微服务架构是一种将单一应用程序拆分为一组小的服务的方法,每个服务都在自己的进程中运行,服务之间通过API进行通信。这种架构风格提高了系统的可伸缩性、可维护性和可部署性。iot_device利用...

    Yii中文教程.doc

    在新建的应用中,yiic 自动生成了基本的目录结构和文件,包括首页、联系页和登录页。这些页面展示了应用的基本功能,如用户认证和表单提交。 Yii 应用的目录结构通常如下: - `index.php`:Web 应用的入口脚本。 -...

    standalone_demo功能说明1

    在standalone_demo中,针对这三种密钥长度分别进行了测试,支持ECB(电子密码本)、CBC(密文块链)和GCM(计数器模式加认证码)三种加密模式。测试结果通过串口log进行输出。 2. **双核并发与核心锁**:corelock...

    ISAPI 开发手册(海康球形摄像机)

    ISAPI适用于一系列海康球形网络摄像机,包括但不限于DS-2DE2204IW(S6)、DS-2DE2402IW(S6)、DS-2DE2D20IW/XM等众多型号。这些摄像机具备PTZ(Pan-Tilt-Zoom)功能,能够进行水平旋转、垂直倾斜和变焦操作,满足不同...

    Citrix环境下客户端软件安装配置指南V1.5

    文档指明了需要安装配置的软件包括open-iscsi和device-mapper-multipath。 在客户端软件安装说明中,文档强调了确认操作系统版本的重要性,建议通过命令行工具lsb_release -a或在图形用户界面(GUI)中查看General...

    Android Widevine概论.docx

    2. **DRM Manager**:位于`/frameworks/av/drm/drmserver`进程中,负责管理和协调所有的DRM插件。 3. **DRM Plugin**:根据具体的DRM标准来实现权限管理和内容解密等功能。对于不同的DRM标准,这些插件的实现也会...

    J2ME基于手机串号验证的手机网站管理工具源码

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式系统和移动设备,特别是智能手机。J2ME由一系列配置和框架组成,适应不同硬件平台的需求。在本项目中,J2ME被用来开发一个手机网站管理工具,它...

    opendaylight Lithium 中文说明书

    例如,“SELECT * FROM flow_statistics WHERE device_id = 'device1'” 可用于查看指定设备上的所有流表统计信息。 - **控制台使用**:XSQL 查询通常在 OpenDaylight 的命令行界面上执行,用户可以通过命令行工具...

    大恒USB相机驱动

    2. **图像传输**:驱动程序支持高速USB传输协议,确保图像数据从相机到计算机的快速无损传输。 3. **兼容性**:大恒USB相机驱动通常与多种操作系统兼容,如Windows XP、Windows 7、Windows 8及Windows 10等,确保在...

    关于 mysql 的一些简单操作 例如修改密码 增加字符等

    - 升级 Navicat 客户端到最新版本,确保其支持 `caching_sha2_password` 认证协议。 2. **将密码验证插件改为 `mysql_native_password`** - 修改 MySQL 用户的密码验证插件为旧版的 `mysql_native_password`,...

Global site tag (gtag.js) - Google Analytics