signup 후 화면에 프로필, 로그아웃을 표시하지 않는 문제를 해결했습니다.

5111 단어 RubyRails

발생한 문제


블로그를 완성하기 위해 로그인 시스템을 구축하는 과정에서 오류가 발생했습니다.
http://localhost:3000/users/new
에서 서명을 실행하면 사용자의 프로필 화면으로 방향을 바꿀 수 있지만 페이지 상부에 프로필과 로그아웃을 표시하지 않고 SignUp과 Login을 표시합니다.

애초에 고려한 원인


 (1)app/helpers/sessions_helper.rb로 정의,layouts/application.html.erb에서 설명한 "logged_in?”지원되지 않는 문제
그러나 코드의 설명 자체에 오류가 발견되지 않았고 조건 지점도logged_in?방법(※)에도 불이 난다.
logged_in?저장 방법의 app/helpers/sessions_helper.rb
module SessionsHelper
  def current_user
    @current_user ||= User.find_by(id: session[:user_id])
  end
  def logged_in?
    current_user.present?
  end
end
(2) 원래'rails g controller sessions new'를 실행할 때sessions_helper.rb가 생성되지 않았습니다.
· · 이것은 "rails g 명령을 통해 -CSS, JavaScript, Helper 파일을 자동으로 생성하지 않는 설정을 기술하기 위해서입니다. 이 여분의 파일을 생성할 수 없습니다", "config/application.rb'에서 다음과 같은 설명을 하였는데, 의도적으로 자동으로 생성되지 않았고, 대신에 자신sessions_helper.rb 파일이 생성되었습니다.
config/application.rb
require_relative 'boot'
require 'rails/all'
Bundler.require(*Rails.groups)
module HogehogeAppli
  class Application < Rails::Application
  #省略
    config.generators do |g|
      g.assets false
      g.helper false
    end
  end
end
이 가능하다, ~할 수 있다,...in?불이 안 난 줄 알았는데.하지만
http://localhost:3000/sessions/new
(Login 페이지) 로그인 시 프로필과 로그아웃이 정상적으로 표시되므로 logged_in?불이 날지 안 날지 모르겠다.
SignUp 이후 Profile과 Logout를 표시하려면 어떻게 해야 할지 고민했습니다.

해결 방법


 logged_in?방법은 무엇이든 문제가 발생하기 때문에 문제는 다른 곳에 있다.
최초 로그인 상태는 사용자의 브라우저 내 쿠키에서 암호화된 사용자 ID를 로그인이라고 하고 계속 유지되는 상태를 로그인 상태라고 합니다.(브라우저와 서버 사이의 동일한 사용자 ID가 서로 연결된 상태) 그 구조는create 때session 방법을 사용하여 쿠키를 사용자 ID로 하여 로그인 상태를 실현하는 것이다.
 
로그인 (=도메인 이름/sessions/new) 이후 프로필과 로그아웃이 정상적으로 표시되지 않고 Signup (=도메인 이름/users/new) 에 Signup 및 Login이 표시되지 않습니다.
우리는 이 차이에 초점을 맞추면 문제를 해결할 수 있다고 생각하며, users_controller.rb 내create 동작이 로그인 상태를 만들 수 없음을 발견했습니다.
app/controllers/users_controller.rb
def create
    @user = User.new(user_params)
    if @user.save
      #下記1行を追記し、ユーザーのブラウザ内のcookiesに暗号化されたユーザーIDが自動で生成されるようにした。
      session[:user_id] = @user.id
      redirect_to user_path(@user.id)
    else
      render :new
    end
  end
그 결과 첨부 파일과 같이 Signup 이후 화면에 Profile과 Logout가 성공적으로 표시됩니다.

좋은 웹페이지 즐겨찾기