質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

157閲覧

Railsでgemを使わずにログイン機能を作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/11/28 07:55

いつもお世話になっております。
こちらのサイトを参考に、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

初歩的な質問で申し訳ないですが、ご教授いただければと思います。
どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scivola

2017/11/29 19:49

うまくいかない,というのは,どんな操作をやったときにどんな結果を期待して,どんな結果になったということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問