2017-11-14 2 views
0
class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :authenticate_user!, :except => [:index] 
    before_action :authenticate, :except => [:index] 

    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     basic_auth=User.find_by_email(username) 
     if basic_auth.valid_password?(password) 
     sign_in :user, basic_auth 
     render :json => {:email => current_user.email, :id => current_user.id, :message => "hai ruby"} 
     else 
     render plain: "Unauthorized access" 
     end 
    end 
    end 
end 

샘플 애플리케이션에서 기본 인증을 구현하려고합니다. 사용자 데이터베이스에서 올바른 자격 증명 값을 제공합니다. 그것은 사용자 이름과 암호가 잘못되면 json 응답을 제공합니다. "정의되지 않은 메소드`valid_password? '와 같은 오류가 발생합니다. 전무을 위해 : NilClass "레일의 기본 인증

답변

0

그냥 실행 조건이 변경 : 사용자가도 주어진 이메일 ID 여부에 존재하는지 여부를

if basic_auth && basic_auth.valid_password?(password)

이 때문에 유효한 암호를 확인하기 전에 작동합니다, 당신은 확인해야합니다. 그렇지 않으면 basic_auth 객체는 nil이되고 nil 객체의 valid_password 메소드는 오류를 발생시킵니다.

+0

정말 고마워요. – rthi