いつもお世話になっております。
こちらのサイトを参考に、Rails5でログイン機能を作っています。
最初にログイン処理をはさみ、通過するとhome#indexに飛ばしたいです。
しかしうまくかず、またどのあたりが間違っているのかもわかりません。
そして、新規登録のページに行けず困っております。
以下がサイトを参考にして作ったものです。
ruby
1#routes.rb 2Rails.application.routes.draw do 3 4 match '', to:'home#index', via:'get', as:'root' 5 6 #login 7 match 'login', to: 'sessions#new', via:'get' 8 match 'login', to: 'sessions#create', via:'post' 9 match 'logout', to: 'sessions#destroy', via:'delete' 10 11 scope :home do 12 match '/show', to:'home#show', via:'get', as:'home_show' 13 end 14 15 16 scope :users do 17 match '', to:'users#index', via:'get', as:'users' 18 match '/new', to:'users#new', via:'get', as:'users_new' 19 match '/create', to:'users#create', via:'post', as:'users_create' 20 match '/edit', to:'users#edit', via:'get', as:'users_edit' 21 match '/update', to:'users#update', via:'post', as:'users_update' 22 match '/delete', to:'users#delete', via:'get', as:'users_delete' 23 end 24 25end
ruby
1#application_controller.rb 2class ApplicationController < ActionController::Base 3 protect_from_forgery with: :exception 4 5 before_action :current_user 6 before_action :require_sign_in! 7 helper_method :signed_in? 8 9 10 def current_user 11 remember_token = User.encrypt(cookies[:user_remember_token]) 12 @current_user ||= User.find_by(remember_token: remember_token) 13 end 14 15 def sign_in(user) 16 remember_token = User.new_remember_token 17 cookies.permanent[:user_remember_token] = remember_token 18 user.update!(remember_token: User.encrypt(remember_token)) 19 @current_user = user 20 end 21 22 def sign_out 23 @current_user = nil 24 cookies.delete(:user_remember_token) 25 end 26 27 def signed_in? 28 @current_user.present? 29 end 30 31 private 32 33 def require_sign_in! 34 redirect_to login_path unless signed_in? 35 end 36 37end
ruby
1#users_controller.rb 2class UsersController < ApplicationController 3 def index 4 end 5 6 def new 7 @user = User.new(user_params) 8 end 9 10 def create 11 @user = User.new(user_params) 12 if @user.save 13 redirect_to users_new_path 14 else 15 render 'new' 16 end 17 end 18 19 def edit 20 end 21 22 def update 23 end 24 25 def delete 26 end 27 28 private 29 30 def user_params 31 params.require(:user).permit(:user_name, :password, :password_confirmation) 32 end 33 34end
ruby
1#sessions_controller.rb 2class SessionsController < ApplicationController 3 # skip_before_action :require_sign_in!, only: [:new, :create] 4 before_action :require_sign_in!, [:destroy] 5 before_action :set_user, only: [:create] 6 7 def new 8 end 9 10 def create 11 if @user.authenticate(session_params[:password]) 12 sign_in(@user) 13 redirect_to root_path 14 else 15 flash.now[:danger] = t('.flash.invalid_password') 16 render 'new' 17 end 18 end 19 20 def destroy 21 sign_out 22 redirect_to login_path 23 end 24 25 private 26 27 def set_user 28 @user = User.find_by!(user_name: session_params[:user_name]) 29 rescue 30 flash.now[:danger] = t('.flash.invalid_user_name') 31 render action: 'new' 32 end 33 34 # 許可するパラメータ 35 def session_params 36 params.require(:session).permit(:user_name, :password) 37 end 38end 39
ruby
1#user.rb 2class User < ApplicationRecord 3 has_secure_password validations: true 4 validates :user_name, presence: true, uniqueness: true 5 6 def self.new_remember_token 7 SecureRandom.urlsafe_base64 8 end 9 10 def self.encrypt(token) 11 Digest::SHA256.hexdigest(token.to_s) 12 end 13end 14
html
1<!--users/new.html--> 2<h1>新規登録</h1> 3<%= form_for(:user, url: users_path) do |f| %> 4 <%= f.label :user_name %> 5 <%= f.text_field :user_name %> 6 7 <%= f.label :password %> 8 <%= f.text_field :password %> 9 10 <%= f.label :password_confirmation %> 11 <%= f.text_field :password_confirmation %> 12 <%= f.submit "登録"%> 13<% end %> 14
html
1<!--sesstions/new.html--> 2<% provide(:title, "Log in") %> 3<h1>ログイン</h1> 4 5<div class="row"> 6 <div class="col-md-6 col-md-offset-3"> 7 <%= form_for(:session, url: login_path) do |f| %> 8 9 <%= f.label :user_name %> 10 <%= f.text_field :user_name, class: 'form-control' %> 11 12 <%= f.label :password %> 13 <%= f.password_field :password, class: 'form-control' %> 14 15 <%= f.submit "ログイン", class: "btn btn-primary" %> 16 <% end %> 17 18 <p>初めての方は <%= link_to "こちら", users_path %> から新規登録を行なってください</p> 19 </div> 20</div> 21
初歩的な質問で申し訳ないですが、ご教授いただければと思います。
どうぞよろしくお願い致します。
うまくいかない,というのは,どんな操作をやったときにどんな結果を期待して,どんな結果になったということでしょうか。
あなたの回答
tips
プレビュー