_header.html.erb의 조건에 따라 적용되지 않는 애플리케이션의 헤더

아비 섹 샤르마

Michael Harlt의 레일 튜토리얼에서 Ruby를 따르고 있습니다. 내 사용자 인증 시스템을 완료했고 잘 작동하지만 헤더 파일의 코드에 따르면 사용자가 로그인 할 때까지 "사용자"및 "계정"링크가 표시되지 않아야합니다. 로그인 페이지 또는 가입 페이지는 사용자가 로그인하지 않은 경우에도이 두 링크를 모두 표시합니다.

브라우저에서 앱을 실행하는 동안 오류가 발생하지 않습니다. 여기에 모든 관련 파일을 게시하고 있습니다. 어떤 도움을 주시면 감사하겠습니다. 다른 정보가 있으면 알려주십시오.

session_controller.rb

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
      remember user
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
    log_out if logged_in?
    redirect_to home_path
  end
end

sessions_helper.rb

module SessionsHelper

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

  # Remembers a user in a persistent session.
  def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end

  # Returns the user corresponding to the remember token cookie.
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by_id(user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by_id(user_id)
      if user && user.authenticated?(cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

  # Returns true if the user is logged in, false otherwise.
  def logged_in?
    !current_user.nil?
  end

  # Forgets a persistant session
   def forget(user)
     user.forget
     cookies.delete(:user_id)
     cookies.delete(:remember_token)
   end

   # Log Out Current User
  def log_out
    session.delete(:user_id)
    @current_user = nil
  end
end

_header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="container">
    <%= link_to "sample app", home_path, id: "logo" %>
    <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Home", home_path %></li>
        <li><%= link_to "Help", help_path %></li>

        <% if logged_in? %>
          <li><%= link_to "Users", '#' %></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
              Account <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
              <li><%= link_to "Profile", current_user %></li>
              <li><%= link_to "Settings", '#' %></li>
              <li class="divider"></li>
              <li>
                <%= link_to "Log out", logout_path, method: "delete" %>
              </li>
            </ul>
          </li>
        <% else %>
          <li><%= link_to "Log in", login_path %></li>
        <% end %>
      </ul>
    </nav>
  </div>
</header>

user.rb

class User < ActiveRecord::Base
  attr_accessor :remember_token
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, length: { minimum: 6 }

  # Returns the hash digest of the given string.
  def User.digest(string)
    cost = BCrypt::Engine::MIN_COST
    BCrypt::Password.create(string, cost: cost)
  end

  # Returns a random token.
  def User.new_token
    SecureRandom.urlsafe_base64
  end

  # Remembers a user in the database for use in persistent sessions.
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end

  # Returns true if the given token matches the digest.
  def authenticated?(remember_token)
     return false if remember_digest.nil?
    BCrypt::Password.new(remember_digest).is_password?(remember_token)
  end

  def forget
    update_attribute(:remember_digest, nil) 
  end
end
개빈 밀러

코드 경로를 살펴보면 이것이 무슨 일이 일어나고 있는지에 대한 최선의 추측입니다.

  • 당신은 당신의 사이트에 로그인 한 설정 sessioncookieuser_id
  • 당신은 로그 아웃하고을 취소 session, 그러나이 cookie지워지지 않습니다
  • 로그인 페이지로 돌아 가면를 통해 인증 할 수 cookie있으므로 로그인 탐색이 표시됩니다.

이와 같은 문제를 확인하기 puts위해 두 개의 코드 경로에 일부 넣고 def current_user그것이 발생하는 경우인지 확인했습니다. 문제 (나는 생각한다)에 대한 수정은 추가하는 것입니다 forgetdestroySessionsController:

def destroy
  if logged_in?
    forget(current_user)
    log_out
  end
  redirect_to home_path
end

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android 애플리케이션의 브라우저에서 Android 애플리케이션으로 .html 파일의 내용을 열고 표시하는 방법

분류에서Dev

CORS 프리 플라이트 응답의 'Access-Control-Allow-Headers'헤더에 따라 'content-type'이 허용되지 않습니다.

분류에서Dev

헤더에 따라 HTML 슬라이스

분류에서Dev

헤더에 따라 애플리케이션 전체에서 렌더링 전환

분류에서Dev

angularjs의 조건에 따라 페이지를 리디렉션하는 방법

분류에서Dev

열의 조건에 따라 팬더 cumsum

분류에서Dev

Azure 웹 사이트의 하위 폴더에서 호스팅되는 nodejs 애플리케이션

분류에서Dev

Web API의 클라이언트 애플리케이션에서 토큰을 사용하는 Azure AD

분류에서Dev

iOS 카메라의 이미지는 웹 애플리케이션에서 회전하여 전송됩니다.

분류에서Dev

application.html.erb는 페이지 사용자에 따라 다른 부분을 렌더링합니다.

분류에서Dev

잡히지 않은 ReferenceError : 모델이 backbone.js 애플리케이션의 html 파일에 정의되어 있지 않습니다.

분류에서Dev

웹 브라우저의 BACK-BUTTON을 사용하는 방법? 자바 웹 애플리케이션에서

분류에서Dev

웹 브라우저의 BACK-BUTTON을 사용하는 방법? 자바 웹 애플리케이션에서

분류에서Dev

.NET Core 애플리케이션의 브라우저 링크에서 사용하는 잘못된 포트

분류에서Dev

HTML, CSS, Javascript를 사용하는 웹 애플리케이션의 다중 시계

분류에서Dev

Javascript의 조건에 따라 코드가 실행되지 않도록 중지

분류에서Dev

javafx 씬 빌더에서 적용되지만 애플리케이션을 실행할 때 적용되지 않는 스타일 시트

분류에서Dev

라이브러리 (소스)와 애플리케이션 (헤더) 컴파일 사이의 (컴파일러) 플래그 불일치를 방지하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

애플리케이션에 스프링 보안의 역할이 표시되지 않는 이유 (금지)

분류에서Dev

헤드에 정의 된 다양한 조건에 따라 페이지 중간에 동적 콘텐츠를 에코

분류에서Dev

애플리케이션의 로컬 폴더에서 이미지 검색

분류에서Dev

show.html.erb에서 렌더링 할 때 정의되지 않은 지역 변수 또는 메서드

분류에서Dev

PCL 애플리케이션에서 UI 요소의 동적 렌더링?

분류에서Dev

Ubuntu에서 애플리케이션의 포함 폴더를 보는 명령

분류에서Dev

Ubuntu에서 애플리케이션의 포함 폴더를 보는 명령

분류에서Dev

Firebase-요청 헤더 필드 x-firebase-gmpid는 프리 플라이트 응답의 Access-Control-Allow-Headers에서 허용되지 않습니다.

분류에서Dev

요청 헤더 필드 x-ms-request-root-id는 프리 플라이트 응답의 Access-Control-Allow-Headers에서 허용되지 않습니다.

분류에서Dev

자바 웹 애플리케이션의 안전하지 않은 객체 참조

분류에서Dev

iOS 애플리케이션 번들의 폴더 내용에 액세스

Related 관련 기사

  1. 1

    Android 애플리케이션의 브라우저에서 Android 애플리케이션으로 .html 파일의 내용을 열고 표시하는 방법

  2. 2

    CORS 프리 플라이트 응답의 'Access-Control-Allow-Headers'헤더에 따라 'content-type'이 허용되지 않습니다.

  3. 3

    헤더에 따라 HTML 슬라이스

  4. 4

    헤더에 따라 애플리케이션 전체에서 렌더링 전환

  5. 5

    angularjs의 조건에 따라 페이지를 리디렉션하는 방법

  6. 6

    열의 조건에 따라 팬더 cumsum

  7. 7

    Azure 웹 사이트의 하위 폴더에서 호스팅되는 nodejs 애플리케이션

  8. 8

    Web API의 클라이언트 애플리케이션에서 토큰을 사용하는 Azure AD

  9. 9

    iOS 카메라의 이미지는 웹 애플리케이션에서 회전하여 전송됩니다.

  10. 10

    application.html.erb는 페이지 사용자에 따라 다른 부분을 렌더링합니다.

  11. 11

    잡히지 않은 ReferenceError : 모델이 backbone.js 애플리케이션의 html 파일에 정의되어 있지 않습니다.

  12. 12

    웹 브라우저의 BACK-BUTTON을 사용하는 방법? 자바 웹 애플리케이션에서

  13. 13

    웹 브라우저의 BACK-BUTTON을 사용하는 방법? 자바 웹 애플리케이션에서

  14. 14

    .NET Core 애플리케이션의 브라우저 링크에서 사용하는 잘못된 포트

  15. 15

    HTML, CSS, Javascript를 사용하는 웹 애플리케이션의 다중 시계

  16. 16

    Javascript의 조건에 따라 코드가 실행되지 않도록 중지

  17. 17

    javafx 씬 빌더에서 적용되지만 애플리케이션을 실행할 때 적용되지 않는 스타일 시트

  18. 18

    라이브러리 (소스)와 애플리케이션 (헤더) 컴파일 사이의 (컴파일러) 플래그 불일치를 방지하는 가장 좋은 방법은 무엇입니까?

  19. 19

    애플리케이션에 스프링 보안의 역할이 표시되지 않는 이유 (금지)

  20. 20

    헤드에 정의 된 다양한 조건에 따라 페이지 중간에 동적 콘텐츠를 에코

  21. 21

    애플리케이션의 로컬 폴더에서 이미지 검색

  22. 22

    show.html.erb에서 렌더링 할 때 정의되지 않은 지역 변수 또는 메서드

  23. 23

    PCL 애플리케이션에서 UI 요소의 동적 렌더링?

  24. 24

    Ubuntu에서 애플리케이션의 포함 폴더를 보는 명령

  25. 25

    Ubuntu에서 애플리케이션의 포함 폴더를 보는 명령

  26. 26

    Firebase-요청 헤더 필드 x-firebase-gmpid는 프리 플라이트 응답의 Access-Control-Allow-Headers에서 허용되지 않습니다.

  27. 27

    요청 헤더 필드 x-ms-request-root-id는 프리 플라이트 응답의 Access-Control-Allow-Headers에서 허용되지 않습니다.

  28. 28

    자바 웹 애플리케이션의 안전하지 않은 객체 참조

  29. 29

    iOS 애플리케이션 번들의 폴더 내용에 액세스

뜨겁다태그

보관