로그인 양식에 발리 데이 추가

18121 단어 Rails

개시하다


로그인 창에 창 대상을 사용하여 채우기 추가

차리다


일단 최초 설정과 준비.
rails new login_form_validate
rails g model user email:string password_digest:string
rails db:migrate
rails g controller users index new 
rails g controller sessions new 
gem 설정
gem 'bcrypt', '~> 3.1.7'
gem 'simple_form'
gem 'bootstrap'
gem 'popper_js'
gem 'tether-rails'
gem 'jquery-rails'
gem 'validates_email_format_of'
routes.rb
Rails.application.routes.draw do
  resources :sessions
  resources :users
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
users_controller
class UsersController < ApplicationController

  def index 
  end 

  def new
    @user = User.new
  end

  def create 
    @user = User.create(user_params)
    if @user.save 
      redirect_to users_path 
    else 
      render :new 
    end 
  end 

  private 

  def user_params
    params.require(:user).permit(:email,:password,:password_confirmation)
  end 
end
users_views
new.html.erb
<br>
<br>
<br>
<br>
<div class="container">
    <%= simple_form_for(@user) do |f| %>
        <div class="form-group">
            <%= f.input :email %>
        </div>
        <div class="form-group">
            <%= f.input :password %>
        </div>
        <div class="form-group">
            <%= f.input :password_confirmation %>
        </div>
        <%= f.submit %>
    <% end %>
</div>
i18n 설정
config/application.달성
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
덧붙이다
config 아래에default,models,views 폴더를 만듭니다
default 이하ja.제작 방법
이거 붙여.
모델 아래에 사용자 폴더를 만들고 다음 ja를 만듭니다.제작 방법
ja:
  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        email: メールアドレス
        password: パスワード
views 폴더 아래 ja.yml 만들기
ja: 
  helpers:
    submit:
        create: '登録する'
        update: '更新する'
        submit: '保存する'
  simple_form:
    required:
        html: '<abbr class="nec">必須</abbr>'
    labels:
      user:
        email: 'メールアドレス'
        password: 'パスワード'
    hints:
      user:
        email: 'サインインするメールアドレスを入力してください'
        password: '半角英数字のみ使えます'
    placeholders:
      user:
        email: 'メールアドレス'
        password: 'パスワード'
이거 붙여.
설정 검증
models/user.달성
user.rb

has_secure_password

    validates :email, presence: true 
    validates :email, :email_format => {:message => '正しいメールアドレスを入力してください'}
    validates :password, presence: true 
이 항목 추가
이렇게 되면

이렇게 되면 사용자를 먼저 등록할 수 있을 것 같아요.

메시지


formObject를 사용하여 로그인 양식에 프롬프트 추가
우선 app에서forms 폴더를 만든 다음에
session.rb 만들기
그리고 안에 있는 것들.
session.rb

class Session
    include ActiveModel::Model 

    attr_accessor :email, :password 

    validates :email, presence: true 
    validates :password, presence: true 

    def save 
        return false if invalid?
        true
    end 
end

이거 추가해.
먼저 Active Model: Model의 내부 순항으로 발리를 사용할 수 있습니다.
attr_accessor에서 사용할 열을 미리 적으십시오.
이번 상황은 이메일과 패스워드입니다.
저장에 관하여.save에서 불려나와validates에 걸리면 돌아오지 않으면 정말 바뀐다.
이런 상황에서 반드시 진실을 명확하게 써야 한다.
다음은 세션스.controller
class SessionsController < ApplicationController
  def new
    @login = Session.new
  end

  def create 
    @login = Session.new(email: params[:session][:email], password: params[:session][:password])
    if @login.save && (@user = User.find_by(email: @login.email)) && @user.authenticate(@login.password)
      redirect_to users_path
    else 
      render :new 
    end 
  end 
end

이렇게 된 느낌.
방금 만든 세션반을 사용하세요.
참고로 거의 폼이에요.object의 반 이름은 무엇이든지 좋습니다. 하지만 이번session은 이유가 있기 때문에formfor 때는 Session이라는 반 이름부터. session.path를 자동으로 만들 수 있으니까요.
예를 들어login이라는 클래스명의formObject를 만들면 로그인 형식으로.

<%= simple_form_for(@login) do |f| %>

<% end %>
시 자동으로 생성되는 경로는login -포스터니까. 즉/logins/create.
if @login.save && (@user = User.find_by(email: @login.email)) && @user.authenticate(@login.password)
만약 이것이 가짜라면,render: new를 실행합니다.
오류 메시지가 표시됩니다.
그나저나 이렇게 되면 잘못된 정보가 영어로 변한다.
이걸 영어로 만들기 위해서.
다음은 localls/models에서 만든session 폴더입니다.yml 만들기
안을 열다

ja:
  activemodel:
    attributes:
        session:
            email: メールアドレス
            password: パスワード
그럼 일본어 되는 거야.

사용자 지정 버전


form_Object에 사용자 정의 버전 추가
이메일이 존재하지 않으면 이메일이 사용되지 않으면 오류가 발생합니다. 이메일은 존재하지만 비밀번호가 존재하지 않는 경우 이메일은 오류가 발생하지 않고 패스워드에서 오류가 발생합니다.
코드는 이런 느낌입니다.
class Session
    include ActiveModel::Model 

    attr_accessor :email, :password 

    validates :email, presence: true 
    validates :password, presence: true 
    validate  :true_email
    validate  :true_password


    def true_email
        errors.add(:email, "は使われていません。") unless User.find_by(email: email)
    end 

    def true_password
        @user = User.find_by(email: email)
        if @user 
            errors.add(:password, "は正しくありません。") unless @user.authenticate(password)
        else  
            errors.add(:password, "は正しくありません。")
        end 
    end 

    def save 
        return false if invalid?
        true
    end 
end
true_이메일과 진실파스워드라는 발리데이를 만들고 있습니다.
오류가 발생했을 때 errors.dd를 통해 발생합니다.
그나저나 errors.add (:base, ") 의 쓰기도 가능하며, 전체적인 오류로 표시하려면 사용할 수 있습니다.
하지만 단순form에 표시되지 않기 때문에 손을 넣어야 합니다.
view에서 @login.errors[:base]의 느낌으로 표현할 수 있어요.
마무리

좋은 웹페이지 즐겨찾기