signup 후 화면에 프로필, 로그아웃을 표시하지 않는 문제를 해결했습니다.
발생한 문제
블로그를 완성하기 위해 로그인 시스템을 구축하는 과정에서 오류가 발생했습니다.
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가 성공적으로 표시됩니다.Reference
이 문제에 관하여(signup 후 화면에 프로필, 로그아웃을 표시하지 않는 문제를 해결했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkym_2020/items/14d48019b62672bace66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)