ruby-日记
刚开始学ruby 最近在用ruby on rails 框架做一个简单的小网页 ,最简单的就是 注册和登录问题了 ,看似简单的功能可能对于像我这样的新手也会能迷茫,还好网上有许多的开源资料供我们学习.
首先是注册 在我们的view中建立注册页面 sinup.html.erb,然后在建立相对应的 控制器 和 路由 以及 数据库表单
rails g controller users signup rails g model user name:string email:string password_digest:string
密码的字段 这样子是进行加密的字段 毕竟即使是管理员 我觉得也不应该能看到明文的密码 加密后的密码存放在password_digest字段当中. 当然最后不要忘记
rake db:migrate
进行数据库迁移
get "signup" => "users#signup", :as => "signup"
添加相应的路由 users要对应view 中文件夹的名字
到 users_controller.rb 中
def signup @user = User.new end
添加上这些内容
路由中添加资源式路由
resources :users, only: [:create]
对应的注册页面 添加金俩一个表单
<div class="signup-form-container clearfix"> <div class="signup-form"> <%= form_for @user do |f| %> <dl class="form"> <dt><%= f.label :name, "用户名" %></dt> <dd><%= f.text_field :name %></dd> </dl> <dl class="form"> <dt><%= f.label :email %></dt> <dd><%= f.text_field :email %></dd> </dl> <dl class="form"> <dt><%= f.label :password, "密码" %></dt> <dd><%= f.password_field :password %></dd> </dl> <dl class="form"> <dt><%= f.label :password_confirmation, "请再输入一次" %></dt> <dd><%= f.password_field :password_confirmation %></dd> </dl> <p><%= f.submit "注册", :class => "signup-button btn btn-primary" %></p> <% end %> </div> </div>
再来添加点样式 app/assets/stylesheets/sections/users.css.scss
.signup-form-container, .login-form-container{ width: 670px; margin: 50px auto; border:1px solid #ddd; padding: 2em; .signup-form, .login-form { width: 100%; } .signup-button, .login-button { padding: 13px; margin-top: 15px; width: 100%; } }
这里停下来,看着这张页面,想想后台要有哪些代码。密码和确认密码项目要匹配,密码存入数据库的时候要加密等等这些任务如果手写是比较麻烦的,好在 Rails 内置了 has_secure_password 这个方法。
使用 has_secure_password
打开 has_secure_password 的文档,可以看到要使用它有两个先决条件,第一,要在 Gemfile 里面添加 Bcrypt,第二,就是要求 users 这张表里有 password_digest 这个字段,这个前面咱们已经生成过了。
到 user.rb 中,添加
rails c u = User.first
has_secure_password
/signup 的表单中填写内容,提交会报错:找不到 users#create ,所以咱们就到 users_controller.rb 中,添加
ef create user = User.new(user_params) user.save redirect_to :root end private def user_params params.require(:user).permit! end
这样就注册成功啦。到数据库中看一下
rails c u = User.first
可以看到密码是以加密的形式存储的。
这样可以认为用户注册就成功了。