2017-03-05 5 views
0

私はこのチュートリアルの後に、ユーザログインを監視するwebappを構築するためにhttps://www.railstutorial.org/book/basic_login をビルドします。ユーザーを適切にログインさせることができましたが、Michael Hartlのコードをすべて守っても問題はあります。Railsチュートリアルログイン/ログアウトフォームが機能しない

  1. 私はブラウザにユーザーのURLを貼り付けることができますが、それでも引き上げるので(実際にログインする必要はありません)。つまり、「localhost:3000/users/1」と入力すると、ログインしているかどうかに関係なく、ページに移動します。
  2. 私は、ユーザーがログインしたとき、またはログインしていないときに、たくさんのファイル(コードについては以下を参照)を表示してapp/views/layoutsフォルダに入れました。ユーザーがログインしていない場合にログインページに表示されている場合は、ヘッダーバーに「ログアウト」と表示しないでください。タブにログインした後、私はこのエラーを取得する:https://i.stack.imgur.com/H5umj.png

私はハートを追ったので、これらのエラーが発生した理由として混乱しています私はちょうど彼が言ったようにチュートリアルです。

コード:

routes.rbを

Rails.application.routes.draw do 
    get 'sessions/new' 

    get 'users/new' 

    root 'sessions#new' 
    get '/home', to:'sessions#new' 
    get '/search', to:'pages#search' 
    get '/people', to:'pages#people' 
    get '/profilepage', to:'pages#profilepage' 
    get '/signup', to: 'users#new' 
    post '/signup', to: 'users#create' 
    get '/login', to: 'sessions#new' 
    post '/login', to: 'sessions#create' 
    delete '/logout', to: 'sessions#destroy' ## this breaks stuff idk why 
    #get '/logout' => :destroy, to: 'sessions#new' #This "works" but has the issue of #1 
    resources :users 

end 

アプリ/ビュー/レイアウト/ _header.html.erb:

<header class="navbar navbar-fixed-top navbar-inverse"> 
     <div class="container"> 
     <nav> 
      <ul class="nav navbar-nav navbar-right"> 
      <li><%= link_to "Home", root_path %></li> 
      <% if logged_in? %> 
       <li><%= link_to "Users", '#' %></li> 
       <li> 
        <%= link_to "Log out", logout_path, method: "delete" %> 
        </li> 
      <% else %> 
       <li><%= link_to "Log in", login_path %></li> 
      <% end %> 
      </ul> 
     </nav> 
     </div> 
    </header> 

アプリ/ビュー/レイアウト/ application.html.erb :

<!DOCTYPE html> 
<html> 
    <head> 
    <title>App</title> 
    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'default', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'default', 'data-turbolinks-track': 'reload' %> 
    </head> 

    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <% flash.each do |message_type, message| %> 
     <div class="alert alert-<%= message_type %>"><%= message %></div> 
     <% end %> 
     <%= yield %> 
     <%= render 'layouts/footer' %> 
     <% if false %> 
     <%= debug(params) if Rails.env.development? %> 
     <% end %> 
    </div> 
    </body> 
</html> 

セッションコントローラ:

class SessionsController < ApplicationController 

     def new 
     end 

     def create 
     user = User.find_by(email: params[:session][:email].downcase) 
     if user && user.authenticate(params[:session][:password]) 
      log_in user 
      redirect_to user 
     else 
      flash.now[:danger] = 'Invalid email/password combination' 
      render 'new' 
     end 
     end 

     def destroy 
     log_out 
     redirect_to root_url 
     end 
    end 

セッションヘルパー:

module SessionsHelper 

     # Logs in the given user. 
     def log_in(user) 
     session[:user_id] = user.id 
     end 

     # Returns the current logged-in user (if any). 
     def current_user 
     @current_user ||= User.find_by(id: session[:user_id]) 
     end 

     def logged_in? 
     !current_user.nil? 
     end 

     def log_out 
     session.delete(:user_id) 
     @current_user = nil 
     end 

     def destroy 
     log_out 
     redirect_to root_url 
     end 
    end 

レーキルート:

enter image description here

答えて

0

次のされているチュートリアルでは、私はそれを自分で試してみましたが、それはそうはっきりと私のためにうまく働いた、正確ですあなたのコードに何かがあります。問題が発生した場合は、コードを確認してrake routesの出力をここに入力してください。私たちのコンソールの出力も同様です。

+0

なぜコードが動作しないのか本当に混乱しています。私は文字通りチュートリアルの第6章から第8章のすべてをコピーして貼り付けましたが、まだ破損しています –

+0

SessionsHelperとSessionsControllerの2つの#destroyメソッドがあります。私はチュートリアルであなたのコードと実際のコードに違いがあるので、見直しを続けます。力があなたと一緒になるかもしれない:) – jedi

+0

だから、私は助けのためにセッションヘルパーのおかげで削除しました。しかし、問題3は未だに解決されていない。それでも経路が見つからない/ログアウトしていないというエラーがある –

関連する問題