Railsはblogプロジェクト02-ログイン機能とセッションの実現を実現する
1.まずモデルuserを生成する
rails g model user login:string hashed_password:string salt:string
行くぞrb誤りがないことを確認した後、近接行データの移行
このブログはしばらく登録をしないで、consoleを利用してユーザーを増やします
2.userのloginにデータ検証を追加する
3.このステップでログインする機能をします.先生はsessionsのcontrollerになります.
rails g controller sessions
4.ルーティングの追加
resources :sessions
5.sessionsコントローラでnewとcreateの2つのactionを確立する
6.ログインページの作成
7.Modelでのパスワード認証方法の実装
8.具体的なcreate方法を実現する
rails g model user login:string hashed_password:string salt:string
行くぞrb誤りがないことを確認した後、近接行データの移行
このブログはしばらく登録をしないで、consoleを利用してユーザーを増やします
2.userのloginにデータ検証を追加する
def password
@password
end
def password=(pass) #password set
return unless pass #pass false
@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) # SHA256
end
3.このステップでログインする機能をします.先生はsessionsのcontrollerになります.
rails g controller sessions
4.ルーティングの追加
resources :sessions
5.sessionsコントローラでnewとcreateの2つのactionを確立する
6.ログインページの作成
<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 %>
7.Modelでのパスワード認証方法の実装
def self.authentication(login,password)
user = User.find_by_login(login)
if user && Digest::SHA256.hexdigest(password + user.salt) ==
user.hashed_password
return user
else
false
end
end
8.具体的なcreate方法を実現する
def create
@user = User.authentication(params[:login],params[:password])
if @user
session[:user_id] = @user.id
flash[:notice] = "Welcome #{@user.login}"
redirect_to posts_path
else
flash[:notice] = "The login or password is not corrent."
redirect_to new_session_path
end
end