假如要向已经有的并且已经进行了数据库迁移的模型中添加字段的话,使用
rails generate migration add_password_to_users password:string
并且在user.rb中添加下面这段话
has_secure_password
validates :password, length: {minimum: 6}
上面这句话会添加一个有安全认证的密码,并且规定了最短6位
然后需要在执行这个命令:
rake db:reset
rake db:migrate
稍微一提健壮参数
def user_params #params存储了由前端传递过来的参数
params.require(:user).permit(:userName, :email )
end
这里规定了强制只允许某几个提交,并将之保存下来返回
在rails前端代码中使用的form_for生成的表单,会自动检查错误,并标红,此时可以使用
<% if @user.errors.any? %>
errors has
<%= pluralize(@user.errors.count, "errors") %>
ge
<% @user.errors.full_messages.each do |mag| %>
<li><%= mag %></li>
<% end %>
<% end %>
来显示错误信息。
以下下为重点:session
rails generate controller Session new
然后在routes.rb路由文件中添加以下路由
get 'login' => 'sessions#new'
post 'login' => 'session#create'
delete 'logout' => 'session#destroy'
在sessioncontroller中的create方法中先查找是否存在表单提交的用户信息
def create
User.find_by(email: params[:session][:password].downcase)
#使用find_by 对email字段进行查找,并转换成小写
if @user && @user.thuthenticate(params[:session][:email])
#thuthenticate是对字段进行匹配
session[:user_id] = @user.id
#能够在主动消除session之前一直保存登录信息
redirect_to @user
else
render 'new'
end
end
添加登出
在show.html.erb和UsersController.rb
<%= link_to "log out", logout_path, method: "delete"%>
def destroy
session.delete(:user_id)
render 'new'
end