`
adventurelw
  • 浏览: 3044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

rails用户认证

阅读更多
反正自己也是新手,生怕学来的东西给忘了……
ruby1.9.3-p194 rails3.2.8
rails new authen --skip-bundle
cd authen
rails g model user name:string salt:string hashed_pswd:string
rake db:migrate
编辑app/models/user.rb
class User < ActiveRecord::Base
  attr_accessor :password, :pswd_confirmation
  attr_accessible :password, :name
  validates_presence_of :name
  validates_uniqueness_of :name
  before_create :generate_hashed

  def self.authentication(name, ps)
    user = User.find_by_name(name)
    return user if user && user.hashed_pswd == Digest::SHA256.hexdigest(user.salt + ps)
  end
  private
  def generate_hashed    
    self.salt = Array.new(10){ rand(1024).to_s(36) }.join
    self.hashed_pswd = Digest::SHA256.hexdigest(self.salt + @password)
  end
end

rails g controller sessions
编辑app/controllers/sessions_controller.rb
# encoding: utf-8
class SessionsController < ApplicationController
  def new
  end

  def create
    @user = User.authentication(params[:name], params[:password])
    if @user
      session[:user_id] = @user.id
      flash[:notice] = "热烈欢迎#{@user.name}莅临"
      #root_path为主页路径
      redirect_to root_path
    else
      flash[:notice] = "The username or password is not correct!!!"
      redirect_to new_session_path
    end
  end 

  def logout
    session[:user_id] = nil
    flash[:notice] = "你已经退出登录"
    redirect_to new_session_path
  end
end

编辑app/controllers/application_controller.rb,添加
  def current_user
    if session[:user_id]
      cur_user = User.find(session[:user_id])
      return cur_user
    end
  end

创建app/views/sessions/new.html.erb
<h2>Sign in</h2>
<%= form_tag :sessions do  %>
<p>
<%= label :name, "登录名:"  %>
<%= text_field_tag :name, params[:name]  %>
</p>
<p>
<%= label :password, "密码: "  %>
<%= password_field_tag :password, params[:password]  %>
</p>
<%= submit_tag "登录" %>
<% end %>

在主页相关的controller中index方法(或者等价的方法中)添加:
@current_user = current_user

在主页中适当位置添加
<% if @current_user %>
  <p>当前用户是:<%= @current_user.name  %></p>
  <%= link_to "Logout", logout_path %>
<% end %>

编辑config/routes.rb
添加:
match '/logout' => 'sessions#logout', :as => "logout"
resources :sessions

rails s
浏览器进入http://localhost:3000/sessions/new进行登录


最后,在实际运用中最好还是使用成熟的gem,比如devise,否则还要自己实现一些其他功能。
分享到:
评论

相关推荐

    Rails项目源代码

    "Sign"可能是项目的登录或注册模块,它涉及用户认证和授权。在Rails中,可以使用Devise这样的gem来处理用户身份验证,提供注册、登录、密码重置等功能。用户模型通常会包含确认令牌、加密密码等相关字段。 4. **...

    Rails 101S

    - **加入用户认证功能**:增加用户注册、登录、注销等基础功能。 - **扩展用户资料**:在用户模型中增加额外字段(如用户名),并提供账号设置页面。 - **作者机制实现**:让文章与用户建立关联,实现“作者”概念。...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    4. **实现认证和授权机制**:为了保证API的安全性,需要实现用户认证和权限管理功能,例如使用JWT(JSON Web Tokens)、OAuth等方式。 5. **错误处理**:定义一套统一的错误处理策略,当请求无法正确处理时能够向...

    web开发之rails最新调试通过购物车代码

    9. **安全和认证**:"程序登录上的一些问题进行的代码调整"可能指的是添加用户身份验证,确保只有登录用户才能操作自己的购物车。这可能涉及到如Devise这样的认证库。 综上所述,这个压缩包中的代码展示了如何在...

    Ruby on Rails中文指南

    10. **会话(Sessions)**和**cookies**:Rails提供了内置的会话管理和cookie支持,用于跟踪用户状态和实现用户认证。 11. **测试(Testing)**:Rails鼓励TDD(Test-Driven Development),提供了丰富的测试工具,...

    ruby on rails 3 tutorial.pdf

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传等。 此外,本书还会介绍Rails的安全实践,包括防止SQL注入、XSS攻击等常见Web安全问题。你将学习如何使用strong parameters...

    rails-api-4.0.0

    七、安全与认证: API的安全性至关重要。常见的安全策略包括OAuth2、JWT(JSON Web Tokens)或API密钥。Rails提供如devise_token_auth这样的库来协助实现这些机制。 八、文档: 良好的API文档是开发者友好性的体现...

    ruby on rails最新版

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...

    关于Rails登录和验证插件http_authentication restful-authentication

    在Rails应用中,用户认证和授权是常见的需求,用于保护应用资源的安全。"http_authentication"和"restful-authentication"是两个早期的Rails登录和验证插件,它们为Rails应用提供了基本的身份验证功能。 HTTP基本...

    Ruby on Rails 4 Tutorial 中文版

    此外,还会有关于安全性的讲解,如CSRF(Cross-site request forgery)防护和如何使用Devise进行用户认证。 总之,《Ruby on Rails 4 Tutorial 中文版》是一本全面而实用的指南,涵盖了从基础到高级的Rails开发知识...

    Agile+Web+Development+with+Rails中文版.pdf

    书中会讲解如何利用这些工具进行数据库操作、表单处理、认证与授权,以及如何与其他服务和API集成。 此外,《Agile Web Development with Rails》还涵盖了测试驱动开发(TDD)和行为驱动开发(BDD)。TDD强调先写...

    Apress - Practical Rails Projects (Oct 2007)

    书中可能会涵盖创建用户认证系统、实现RESTful API、集成第三方服务(如支付网关或社交媒体API)以及优化性能等内容。此外,还会讲解如何部署Rails应用到服务器,如使用Capistrano进行自动化部署。 附带的源代码...

    ruby on rails社区网站开发源码

    13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...

    InspiniaAdmin 2.6.1 Rails_Full_Version

    1. **用户认证与授权**:内置了用户注册、登录、权限管理等功能,可以轻松实现用户身份验证和角色权限控制,确保后台的安全性。 2. **数据可视化**:集成了一系列图表库,如Chart.js和Morris.js,用于数据展示和...

    Rails3 device and cancan

    Devise是一个流行的Ruby on Rails的认证解决方案,它提供了一套完整的工具来处理用户认证,如用户注册、登录、会话管理等。而Cancan则是一个用于授权的gem,用于控制用户对不同资源的访问权限。 从给定的文件内容中...

    ruby on rails在线考试系统

    例如,Devise用于用户认证,Cancancan进行权限控制,Paperclip或Carrierwave处理文件上传等。 8. 安全性:Rails内置了一些安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防护以及参数过滤等。在考试...

    Ruby On Rails中文教材(PDF)

    10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...

    rails应用--导航栏实例工程

    这通常涉及使用Rails的Administrate或Devise等gem,它们可以帮助我们快速构建用户认证和管理界面。Administrate提供了一个简单的后台界面,而Devise则处理用户注册、登录、密码重置等功能。 在实际项目中,我们还...

    Rails 3 in Action

    - 令牌认证(token authentication)。 - 外部服务集成,如 OAuth。 #### 七、文件上传 第九章讨论了 **文件上传** 的实现方式,这是 Web 应用中常见的功能之一。 - **文件上传**: - 实现用户可以上传图片、文档...

Global site tag (gtag.js) - Google Analytics