反正自己也是新手,生怕学来的东西给忘了……
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,否则还要自己实现一些其他功能。
分享到:
相关推荐
"Sign"可能是项目的登录或注册模块,它涉及用户认证和授权。在Rails中,可以使用Devise这样的gem来处理用户身份验证,提供注册、登录、密码重置等功能。用户模型通常会包含确认令牌、加密密码等相关字段。 4. **...
- **加入用户认证功能**:增加用户注册、登录、注销等基础功能。 - **扩展用户资料**:在用户模型中增加额外字段(如用户名),并提供账号设置页面。 - **作者机制实现**:让文章与用户建立关联,实现“作者”概念。...
4. **实现认证和授权机制**:为了保证API的安全性,需要实现用户认证和权限管理功能,例如使用JWT(JSON Web Tokens)、OAuth等方式。 5. **错误处理**:定义一套统一的错误处理策略,当请求无法正确处理时能够向...
9. **安全和认证**:"程序登录上的一些问题进行的代码调整"可能指的是添加用户身份验证,确保只有登录用户才能操作自己的购物车。这可能涉及到如Devise这样的认证库。 综上所述,这个压缩包中的代码展示了如何在...
10. **会话(Sessions)**和**cookies**:Rails提供了内置的会话管理和cookie支持,用于跟踪用户状态和实现用户认证。 11. **测试(Testing)**:Rails鼓励TDD(Test-Driven Development),提供了丰富的测试工具,...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传等。 此外,本书还会介绍Rails的安全实践,包括防止SQL注入、XSS攻击等常见Web安全问题。你将学习如何使用strong parameters...
七、安全与认证: API的安全性至关重要。常见的安全策略包括OAuth2、JWT(JSON Web Tokens)或API密钥。Rails提供如devise_token_auth这样的库来协助实现这些机制。 八、文档: 良好的API文档是开发者友好性的体现...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...
在Rails应用中,用户认证和授权是常见的需求,用于保护应用资源的安全。"http_authentication"和"restful-authentication"是两个早期的Rails登录和验证插件,它们为Rails应用提供了基本的身份验证功能。 HTTP基本...
此外,还会有关于安全性的讲解,如CSRF(Cross-site request forgery)防护和如何使用Devise进行用户认证。 总之,《Ruby on Rails 4 Tutorial 中文版》是一本全面而实用的指南,涵盖了从基础到高级的Rails开发知识...
书中会讲解如何利用这些工具进行数据库操作、表单处理、认证与授权,以及如何与其他服务和API集成。 此外,《Agile Web Development with Rails》还涵盖了测试驱动开发(TDD)和行为驱动开发(BDD)。TDD强调先写...
书中可能会涵盖创建用户认证系统、实现RESTful API、集成第三方服务(如支付网关或社交媒体API)以及优化性能等内容。此外,还会讲解如何部署Rails应用到服务器,如使用Capistrano进行自动化部署。 附带的源代码...
13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...
1. **用户认证与授权**:内置了用户注册、登录、权限管理等功能,可以轻松实现用户身份验证和角色权限控制,确保后台的安全性。 2. **数据可视化**:集成了一系列图表库,如Chart.js和Morris.js,用于数据展示和...
Devise是一个流行的Ruby on Rails的认证解决方案,它提供了一套完整的工具来处理用户认证,如用户注册、登录、会话管理等。而Cancan则是一个用于授权的gem,用于控制用户对不同资源的访问权限。 从给定的文件内容中...
例如,Devise用于用户认证,Cancancan进行权限控制,Paperclip或Carrierwave处理文件上传等。 8. 安全性:Rails内置了一些安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防护以及参数过滤等。在考试...
10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...
这通常涉及使用Rails的Administrate或Devise等gem,它们可以帮助我们快速构建用户认证和管理界面。Administrate提供了一个简单的后台界面,而Devise则处理用户注册、登录、密码重置等功能。 在实际项目中,我们还...
- 令牌认证(token authentication)。 - 外部服务集成,如 OAuth。 #### 七、文件上传 第九章讨论了 **文件上传** 的实现方式,这是 Web 应用中常见的功能之一。 - **文件上传**: - 实现用户可以上传图片、文档...