【Rails】 로그인 기능 정보
로그인 기능의 개요
세션에 사용자 정보가 있는지 판단합니다.
session에 사용자 정보가 없는 경우
→ 로그인(사용자 등록 화면)
session에 사용자 정보가 있는 경우
- 로그인 후 페이지 표시
이것이 바로 로그인 기능의 기본 절차라고 생각합니다.
rails에서session은 사용자의 정보를 자동으로 암호화하고 저장할 수 있기 때문에 우리는 고려하지 않습니다.
사용자 등록 이후 글도 공개됐으니 참고하세요.
컨트롤러
로그인 기능으로 이루어진 것은 new,create,destroy 동작입니다.
다음 코드는 로그인 기능의 컨트롤러입니다.
session.rb
class SessionsController < ApplicationController
def new
end
def create
email = params[:session][:email].downcase
password = params[:session][:password]
if login(email, password)
flash[:success] = 'ログインにしました'
redirect_to @user
else
flash.now[:danger] = 'ログインに失敗しました'
render 'new'
end
end
def destroy
session[:user_id] = nil
flash[:success] = 'ログアウトしました'
redirect_to root_url
end
private
def login(email, password)
@user = User.find_by(email: email)
if @user && @user.authenticate(password)
session[:user_id] = @user.id
return true
else
return false
end
end
end
create 동작에서 로그인에 성공하면 사용자의 상세한 화면으로 이동하고 로그인에 실패하면 다시 로그인 화면으로 이동합니다.login(email,password)에서 입력한 이메일과password를 매개 변수로 사용자가 등록했는지 확인합니다.
뷰 화면
로그인 화면.CSS의 최소 화면은 사용할 수 없습니다.웃다 웃다
index.html
<%= form_for(:session, url: login_path) do |f| %>
<div class="form-group">
<%= f.label :email, 'Email' %>
<%= f.email_field :email, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password, 'Password' %>
<%= f.password_field :password, class: 'form-control' %>
</div>
<%= f.submit 'Log in', class: 'btn btn-primary btn-block' %>
<% end %>
<p>New user? <%= link_to 'サインアップ画面', signup_path %></p>
완전 못생겼지만 최소한의 로그인 화면.서명 화면은 사용자 등록에 기술되어 있다.
로그인 후 화면
로그인 후 표시할 코드를 다음 코드에 기술합니다.
<% if logged_in? %>
ログイン後に表示したいコード
<% end %>
로그인 요청 화면
사용자가 로그인하지 않은 경우 로그인을 요구하는 기능입니다.
모든 컨트롤러에서 호출할 수 있도록 프로그램 컨트롤러에 설치합니다.
application_controller.rb
class ApplicationController < ActionController::Base
def require_user_logged_in
unless logged_in?
redirect_to login_url
end
end
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!!current_user
end
end
require_user_logged_in에 따라 사용자가 로그인했는지 여부를 판단하는 코드입니다.응용 프로그램 컨트롤러에 기록되어 있기 때문에 다른 컨트롤러도 호출할 수 있다
before_acto에서 지능적으로 기술했어.
before_action :require_user_logged_in, only: [:index, :show]
이상은!이렇게 하면 로그인 기능이 실현될 수 있을 거야!
Reference
이 문제에 관하여(【Rails】 로그인 기능 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gussan-dayo/items/48f8542d02314a346eb3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)