Ruby on Rails创建你自己的User并实现登陆功能
来源:互联网 发布:insar数据购买 编辑:程序博客网 时间:2024/04/29 14:51
话说rails里面有许多gem可以实现用户管理等等各种复杂的功能,但是对于一个初上手ror的菜鸟来说,未免也会显得有点无从下手,所以我们干脆来做一个简单的用户类,来了解一些基本的概念,之后用其他人的gem的时候也会得心应手。
ok,现在
- rails generate model user login:string hashed_password:string salt:string
下面这些代码是你需要加在User.rb这个对象中的
- class User < ActiveRecord::Base
- attr_accessible :login, :password
- validates :login, :presence => true
- def password
- @password
- end
- def password=(pass)
- return unless pass
- @password = pass
- generate_password(pass)
- end
- private
- def generate_password(pass)
- salt = Array.new(10){rand(1024).to_s(36)}.join
- self.salt, self.hashed_password =
- salt, Digest::SHA256.hexdigest(pass + salt)
- end
- end
此时还需要
- rake db:migrate
然后我们rails c进入控制台
- User.create(:login => "gonjay", :password => "111111")
这里解释一下ror中的new和create的区别,就是new的时候没有保存对象到数据库,create的时候会保存,如果在你new一个对象之后再save一下,那么作用就和create的作用是一样的。至于ruby中为什么用“=>”来表示赋值,可能是因为看起来比较酷吧~
此时你User.all的时候就能看见你刚刚创建的对象了,很嗨皮是吧,可是我们要怎么才能和这个User一起嗨皮呢?
- rails generate scaffold session
然后我们需要session_controller.rb
- class SessionsController < ApplicationController
- def new
- end
- def create
- @user = User.authenticate(params[:login], params[:password])
- if @user
- session[:user_id] = @user.id
- flash[:notice] = "Weclome #{@user.login}"
- redirect_to posts_path
- else
- flash[:notice] = "The login or password is not correct."
- redirect_to new_session_path
- end
- end
- end
此时传进去了两个参数,是从view那边post过来的东西,我们用ApplicationController自己带的一个params的方法把post过来的数据抓取住。(话说我之前玩芯片总是被各种寄存器折磨的要死,现在看见这些东西觉得好神奇#^=^#,你可以不需要操心底层的是怎么做事的了~)
下面贴出在User的authenticate代码
- def self.authenticate(login, password)
- user = User.find_by_login(login)
- if user && Digest::SHA256.hexdigest(password + user.salt) == user.hashed_password
- return user
- end
- false
- end
加上self之后,这个方法就成为了一个私有方法,不能被别人随便调用。authenticate里面首先根据login判断这个user是否存在我们的数据库中,如果在就返回这个user,将其中的salt和输入的password用SHA256给它整到一起,看看能不能凑成之前存的hashed_password这个值,如果凑成了就说明密码是对的,没有就返回错啰~
现在我们还要在view/sessions/new.html.erb给它加上一些表单,然后我们就能欢快的登陆了
- <h1>Admin Login</h1>
- <%= form_tag sessions_path do -%>
- <label for="login">Login</label>
- <%= text_field_tag :login, params[:login] %>
- <label for="password">Password</label>
- <%= password_field_tag :password, params[:password] %>
- <%= submit_tag "Login"%>
- <% end %>
- Ruby on Rails创建你自己的User并实现登陆功能
- Ruby on Rails创建你自己的User并实现登陆功能
- 在Ruby On Rails中实现Mail发送的功能
- Ruby on Rails,一个简单的CMS系统,创建应用骨架并与数据库连接
- 通过弹出层实现新建功能 ruby on rails
- 通过js实现删除功能 ruby on rails
- 通过js实现编辑功能ruby on rails 弹出层
- Ruby On Rails登陆页面示例
- Ruby on Rails,创建一个最简单的站点。
- Ruby on Rails,创建开发用的MYSQL数据库
- ruby on rails创建的页面访问非常慢
- ruby on rails 的书
- Ruby on Rails的神奇
- ruby on rails的session
- ruby on rails的session
- Ruby On Rails -- Rails的安装
- Ruby on Rails 怎么实现整个网站的index
- 利用to_param实现Ruby on Rails 的URL优化
- 想用OpenCV观察图像数据?这里是详解
- 大话设计模式读书笔记一
- NDK eclipse环境配置
- 指针动态内存分配小程序和图示举例
- [IT]JSONP跨域的原理解析
- Ruby on Rails创建你自己的User并实现登陆功能
- 云派网-北风网视频教程破解论坛-中国最大的各大视频软件合购破解————虚假网站,绝对坑人
- 深入浅出 RPC - 深入篇
- leetcode 8. 将整数的位数反序 Reverse Integer
- #1162 : 骨牌覆盖问题·三
- android 常用时间格式转换代码
- Shell脚本中参数处理方法
- 摩托罗拉moto_g_lte(xt1079:双4g)_root_刷recovery,gapps方法
- cocos2dx项目显示窗口大小调整