디자인, Rails 사용자 인증 스위스 군도.

5149 단어 rails
코드를 작성할 때 나는 간단한 규칙들을 배웠다.첫 번째는 너 자신(DRY)을 반복하지 않는 것이다. 두 번째는 내가 항상 나의 정규 표현식을 주석해야 한다는 것이다. (너는 너의 모든 코드를 주석해야 하지만 주로 너의 정규 표현식이다) 마지막으로 네가 구축하고 있는 것을 더욱 빨리 구축하는 데 도움을 줄 수 있는 도구가 있는지 찾아라.

왜 디자인했어요??


만약 네가 나와 같다면, 너는 마이클 하틀의 《 rails 》 라는 책을 읽으며 rails를 배울 것이다.이 책은 rails와 TDD 방법을 배우고 싶은 모든 사람에게 추천하는 진귀한 책이다.책에서 사용자 모델을 구축할 때 Michael은 has_secure_password를 사용하여 사용자 신분 검증을 한다.이 예는 매우 유용하다. 이것이 바로 내가 쓰는 것이다. 왜냐하면 이것이 내가 아는 것이기 때문이다.내가 계속 r/rails하고 Deave를 발견할 때까지.

Well Desive는 사용자 인증을 위한 기묘한 보석입니다.이것은 내가 여기서 설명한 것보다 훨씬 많은 일을 처리하지만, 기본적으로 신분 검증, 실패한 로그인 시도 관리, 계정 잠금, 계정 복구를 위한 특정한 컨트롤러 방법을 구축할 필요가 없다. 프로그램에 Desive를 설치하기만 하면 모든 기능을 얻을 수 있다.

어떻게 설계합니까


우선, 문서는 항상 값이 없는 자원이기 때문에, 내 코드를 복사하고 붙이기 전에 참고하도록 요구할 것이다.Devise Repo .
기본적인 사용자 인증을 해보겠습니다.

첫 번째 단계 - 모델

  • desivegem를gem 파일gem 'Devise'에 추가한 다음bundle 설치를 실행합니다.
  • 발전기rails generate devise:install를 운행한다.이 때 콘솔에 많은 설명이 나타날 것이다.이 설명에서는 각 환경의 Desive mailer에 대한 기본 URL 옵션을 설정해야 합니다.예를 들어, 개발 환경에서는 config/environments/development.rb
  • config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
    
  • Desive 모델을 생성하여 다른 모델rails generate devise user을 생성한 후 마이그레이션rails db:migrate을 실행합니다.
  • - 이 때 rails 공식 문서에서 rails 프로그램을 다시 시작하는 것을 권장합니다.이상한 실수를 피하기 위해 스프링 정지spring stop도 포함해야 한다.
    주의해야 할 것은, 당신의 모델에 재미있는 코드가 추가될 것입니다.구체적으로 모델의 Desive 방법에는 모듈을 구성하는 데 사용할 수 있는 옵션이 있습니다.보아하니
     devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable :validatable
    

    2단계-코스

  • Desive에 대한 라우트를 구성하려면 config/routes.rb 파일에 다음 행을 추가합니다.
  • devise_for :users
    
  • 그러나 더 구체적인 루트가 필요하다면 직접 루트를 만들어서 공유기 devise_scope 블록에 포장할 수 있습니다.예를 들면 다음과 같습니다.
  • devise_scope :user do
        post 'sign_in', to 'devise/sessions#create'
    end
    

    3단계 - 컨트롤러

  • 이 예에서 로그인과 로그아웃을 위한 세션 컨트롤러만 구축합니다.
  • Desive를 사용하는 컨트롤러는 일반 컨트롤러와 크게 다르지 않은 것으로 보입니다.이런 상황에서 그것은 이렇게 보인다.
  • class SessionsController < Devise::SessionsController
    
      # sign in
      def create
        if @user.valid_password?(sign_in_params[:password])
          sign_in "user", @user
          render json: {
            messages: "Signed In Successfully",
            is_success: true,
            data: {user: @user}
          }, status: :ok
        else
          render json: {
            messages: "Signed In Failed - Unauthorized",
            is_success: false,
            data: {}
          }, status: :unauthorized
        end
      end
    
      private
      def sign_in_params
        params.require(:sign_in).permit :email, :password
      end
    
      def load_user
        @user = User.find_for_database_authentication(email: sign_in_params[:email])
        if @user
          return @user
        else
          render json: {
            messages: "Cannot get User",
            is_success: false,
            data: {}
          }, status: :failure
        end
      end
    end
    
    현재 우리는 이미 모델, 루트, 컨트롤러를 설치하여 사용할 수 있다rails s그리고 우체부로 이 단점들을 테스트한다.(또는 CLI 고집쟁이에게 곱슬머리 제공)
    Postman에서 요청한 JSON 객체는 다음과 같습니다.
    {
        "user":{
            "email": "[email protected]",
            "password" : "foobar123"
        }
    }
    
    (이 가정은 데이터베이스에 사용자의 전자메일과 비밀번호가 위와 같다는 것을 가정하십시오.)
    localhost:3000/sign POST 요청을 보내면 200-OK의 회답을 받을 수 있습니다.
    기본적으로 그렇습니다.사용자 인증 기능을 제공하기 위해 응용 프로그램에서 실행하도록 설계되었습니다.
    이제 다른 모델의 접근 권한을 로그인한 사용자로 제한하는 것만 남았습니다.내가 데시브한테 전화한 스위스 군도 기억나?그것은 많은 조수 방법을 덧붙였는데, 그 중 하나는 :authenticate_user!이다
    따라서 사용자가 방문하기 전에 권한을 부여받아야 하는 모든 모델에 대해 다음과 같은 추가만 하면 된다.before_action :authenticate_user! 컨트롤러에 있습니다.
    이것 또한 특정한 변화로 확대할 수 있다. 예를 들어before_action :authenticate_user!, only: [:create]이것은 창설 작업을 로그인한 권한 있는 사용자만 제한합니다.
    희망은 Desive gem을 사용하기 시작하는 데 필요한 지식을 포함한다.그러나 그것도 모자라서 다시 읽는다docs.

    주의 사항devise_token_authhere

    좋은 웹페이지 즐겨찾기