`
hot88zh
  • 浏览: 182948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails实现Remember me

阅读更多

我们要用cookies来实现这个功能,大多数用户使用session来实现存储用户的登录信息,这是一个很好的做法。session跟cookie不同,session可以自动加密要存储的信息并用浏览器的cookie来存储。 ActionController#cookie提供了一个在浏览器存储信息的方法,但是不能自动加密,如果你需要的话,可以自己加密。

 

如果一个用户选择了remember me这个功能登录了之后,我们需要把session的过期时间设置的长一点,比如30天,但是只改变这一个session的过期时间很难。

 

首先我们要创建两个cookie:

第一个:存储用户的ID信息,当然你也可以存储别的,但是我推荐是ID,因为这不会泄露关于用户的任何信息。

第二个:存储用户的另外一个信息,可以是用户名或者Email,当然这个是加密过的。

 

   if params[:rememberMe]  
   userId = (@user.id).to_s  
   cookies[:remember_me_id] = { :value => userId, :expires => 30.days.from_now }  
   userCode = Digest::SHA1.hexdigest( @user.email )[4,18]  
   cookies[:remember_me_code] = { :value => userCode, :expires => 30.days.from_now }  
   end  
 

第二个加密的字符串,一定要用单方向加密的算法,比如SHA1。当用户的session过期之后,我们可以用这两个cookie来验证用户的信息。

 

if ( cookies[:remember_me] and cookies[:remember_me] and User.find( cookies[:remember_me]) and Digest::SHA1.hexdigest( User.find( cookies[:remember_me] ).email )[4,18] == cookies[:remember_me_code]  )  
@u = User.find( cookies[:remember_me_id] )  
session['user'] = @u.id  
end
 

当用户登出之后,别忘了删除cookie的信息。

 

if cookies[:remember_me_id] then cookies.delete :remember_me_id end  
if cookies[:remember_me_code] then cookies.delete :remember_me_code end

 

别忘了在你使用SHA1加密算法的页面写上:require ‘digest/sha1′

0
0
分享到:
评论

相关推荐

    rails实现验证码实例

    实例的源代码 博文链接:https://babo.iteye.com/blog/72298

    Rails实现的简历系统

    在Rails中,可以使用第三方库如`gem 'recaptcha'`来集成谷歌的reCAPTCHA服务,或者创建自定义的验证码生成器,通过随机字符或图片实现。 4. **数据查询**:Rails的ActiveRecord层提供了强大的查询接口,如`where`、...

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    Rails101_by_rails4.0

    作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    关于rails 3.1 cucumber-rails 1.2.0

    这些步骤的实现位于`step_definitions`目录下,通常包含Ruby代码,它们将Gherkin步骤与实际的代码逻辑关联起来。通过这种方式,Cucumber-Rails帮助团队确保代码按照预期运行,同时提供了一种非技术人员也能理解的...

    Ruby-GoogleSignInforRails实现将Google登录集成到您的Rails应用中

    Google Sign-In for Rails 实现将Google登录集成到您的Rails应用中

    Struts2和Rails的国际化实现

    总结来说,Struts2和Rails的国际化实现都是基于资源文件,并通过特定的API或辅助方法在代码中引用这些资源。它们都考虑了会话和请求的上下文来自动选择合适的语言,并提供了手动切换语言的能力。尽管实现方式有所...

    rails2-sample

    这一章节将介绍如何在Rails应用中集成Ajax技术,实现更加交互式的用户体验。同时,还将探讨Web 2.0的概念,包括社会化网络、用户生成内容和实时数据流等。 #### 8. Protective Measures(防护措施) 网络安全是...

    Rails 101S

    - 使用Rails内建的Scaffold命令创建模型、控制器和视图,实现基本的CRUD操作。 - 示例:通过`rails generate scaffold Topic title:string description:text`创建一个Topic模型及其关联的CRUD操作。 - **整合...

    中文版rails教程

    Ruby的语法优雅,支持块、闭包和元编程,这使得Ruby在编写Rails应用时能够实现高度的灵活性和可扩展性。 **Rails框架核心组件** 1. **模型(Model)**:模型是应用的核心,负责处理数据和业务逻辑。ActiveRecord是...

    component base rails applications

    在掌握了以上知识点后,开发人员能够更加系统地了解如何利用Rails Engine来实现模块化的Rails应用,从而提高代码的复用性、可维护性和扩展性。通过拆分成组件,还能让团队分工更加清晰,提高开发效率,减少代码间的...

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    botstack, 使用 Ruby on Rails 实现快速聊天.zip

    botstack, 使用 Ruby on Rails 实现快速聊天 botstack 这是创建 FB Chatbots的基础项目。 它拥有一个状态机和用户管理,允许你使用模块添加功能。快速入门将所有逻辑放入 lib/bot 。 我们已经准备好一切为你的项目做...

    基于ruby on rails框架实现的音乐推荐网站项目源码.zip

    基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码...

    rails本地安装包完整版

    它允许Rails应用作为客户端,通过HTTP与遵循REST原则的远程资源进行交互,从而实现数据的获取和更新。 5. **rake-0.8.1.gem**:Rake是Ruby社区广泛使用的构建工具,类似于Java的Ant或Python的setup.py。它允许...

Global site tag (gtag.js) - Google Analytics