자기가 쓰는 노트(로그인·find와 find by의 차이점·helper는 무엇이며, 사용법은?)
5040 단어 Rails
로그인 기구
세션 리소스를 생성하여 로그인
쿠키에 저장.
로그인 페이지로 이동 (new)
↓
정보를 입력하다
로그인 정보 보내기
↓
사용자 ID가 세션으로 전달됨
↓
로그인 완료(세션에서 사용자 ID를 꺼낸 상태)
그 뒤에
<%= @current_user.name %>
이렇게 빼는 것처럼.
데이터 출력은 유무@current_user와user에 따라 달라질 수 있습니다
로그인 정보 입력 창 만들기
폼은 데이터베이스 수정을 위한 것(form for(모델)do|f|)
사용자 등록과 다른 점은 세션에 세션 모델이 존재하지 않는다는 것이다
→ 존재하지 않음@user 이런 실례 변수
↓
추가 정보를 스스로 명시해야 합니다(이번에는 변경된 자원에 대한 이름과 대응하는 URL입니다)
<%= form_for(:session,url: login_path) %>
f.email_form
↓
보낸 데이터는 "session[:password"입니다.
그러니까 파람스로 받는 거예요.
로그인 기능 만들기
params를 입력하고 세션을 입력한 이메일을 받은 [: 이메일] 에서 입력한 세션을 찾습니다
↓
찾으면 user 대입
↓
user에 있는password와
↓ authhenticate를 통해 세션에 입력한password가 일치하는지 확인
↓
(일치?)
○ × →render new
↓
session[:user_id]=user.id
세션 중입니다.대입 id
session[:user id]이nil이면 "아무도 로그인하지 않은 상태"
session[:user id]에 값이 대입되면 해당 ID를 가진 사용자가 로그인 중입니다.
간편한 로그인
로그인 여부는 앞으로 누군지 확인해야 합니다.
이것은session[:user id]로 획득하면 됩니다.
여러 번 호출하는 것은 매우 번거롭기 때문에 방법으로 정의한다.
def current_user
@current_user =User.find_by(id: session[:user_id])
end
(find의 경우 사용자가 없으면 오류가 발생하므로 이번에find by 사용)
(대입@current_user을 통해 데이터베이스를 검색하는 횟수는 처음이다.)
↓ 정의하기 전에 대입 산자의 "|||="미리 이해
이름이 "|="인 대입 연산자
a ||= xxx
a가 가짜이거나 정의되지 않았을 때 xxx를 a에 대입합니다.
이걸 다시 쓰면...
a = a || xxx
즉, a에 값이 있는 상황에서 a는 a에 대입되기 때문에 원형을 유지한다.
즉, a가 값(nil)이 없거나 가짜일 때만 a가 a에 대입된다는 것이다.
계속하다
현재 로그인 중인 사용자 꺼내기 (있다면)
def current_user
if session[:user_id]
@current_user = @current_user || User.find_by(id: session[:user_id])
end
end
로그인한 사용자가 있는 경우 (session[:user id]는nil이 아닌 경우)
@current_usernil 또는 가짜인 경우session[:user id]를 대입@current_user합니다.
@current_user가 있는 경우 그대로 둡니다.
↓ 덮어쓰기
def current_user
if session[:user_id]
@current_user ||= User.find_by(id: session[:user_id])
end
end
find 및 findby의 차별화 사용
find
→ id만 (id를 알 때만 사용 가능)
id를 모르면 사용할 수 없습니다.
find_by
→ id를 사용하지 않아도 된다 (돌아온 결과는 하나)
id를 모를 때 (nil이 될 때) 이걸 사용합니다.
아이디를 알았을 때find였어요.
아이디를 모를 때는 find.사용하다
helper 소개
뷰의 모듈을 간단하게 쓰기 위해
formfor、link_to
기본적으로 View를 사용하여 지원 방법을 호출합니다.
• Controller를 통해 호출하려는 경우
→ 직접 불러낼 수 없기 때문에 응용 프로그램입니다.컨트롤러에 글을 붙여야 돼요.
class ApplicationController < ActionController::Base
include Sessions Helper ← 이거
end
· helper를 만들어야 하는데?
전체 프로그램에서 Helper를 사용하고 싶은 경우
→app/helpers/application_helper.rb로 정의
특정 모델에서 Helper를 사용하고 싶은 경우
→ app/helpers/(특정 모델 이름)helper.rb로 정의
구체적으로 어떻게 씁니까?(세션 모드에만 적용) (이번에는 controller에 사용)
module SessionsHelper
(여기에 적는다)
end
(내용)
def log_in(user)
session[:user_id]=user.id
end
호출하고 싶을 때 대상 컨트롤러에 방법만 쓰면 ok
잘 모르겠어요 path 이용자분께.
Reference
이 문제에 관하여(자기가 쓰는 노트(로그인·find와 find by의 차이점·helper는 무엇이며, 사용법은?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koao123/items/ef40d487e8842760ea0d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)