【Rails】 로그인 기능 정보

9136 단어 로그인RubyRails
세션의 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]
이상은!이렇게 하면 로그인 기능이 실현될 수 있을 거야!

좋은 웹페이지 즐겨찾기