ruby on rails - रेल एपीआई: प्रमाणीकरण को लागू करने का सबसे अच्छा तरीका?




ruby-on-rails ruby-on-rails-4 (3)

मैं एक रेल 4 ऐप लिख रहा हूं जो एक मोबाइल ऐप के लिए एक एपीआई को उजागर करेगा जिसे अभी विकसित किया जाना है। उपयोगकर्ता मोबाइल ऐप से ई-मेल और पासवर्ड का उपयोग करके प्रमाणित करेंगे।

जबकि मुझे इस विषय पर काफी जानकारी मिली है। यह मुश्किल है कि क्या दिनांकित या गैर-इष्टतम है। मैंने HTTP बेसिक ऑथ के बारे में पढ़ा है, जो बहुत सुरक्षित नहीं लगता है, और HTTP टोकन-आधारित ऑथेंटिकेशन, लेकिन मुझे यकीन नहीं है कि कैसे जोड़ेगा कि नियमित ई-मेल और पासवर्ड प्रमाणीकरण के साथ (मैं डेविस का उपयोग कर रहा हूं) रास्ता)।

मैं यह जानना चाहूंगा कि इसे लागू करने के तरीके पर वर्तमान में सबसे अच्छा अभ्यास क्या है, इसलिए मुझे यकीन है कि यह सही तरीका होगा।


@ Roma149 यह एक व्यक्तिगत प्राथमिकता है, लेकिन ज्यादातर लोग जो अभी शुरुआत कर रहे हैं वे डेविस का उपयोग करते हैं क्योंकि यह सबसे आसान आईएमओ है। OAuth2 एक अच्छा विकल्प है। अधिक महत्वपूर्ण नोट के रूप में आप हमेशा रूबी टूलबॉक्स में जा सकते हैं

रत्नों पर बहुत अच्छी जानकारी है और वे आपको मणि की आयु और लोकप्रियता भी बताते हैं। यह आपको उन रत्नों के बीच अंतर करने की भी अनुमति देगा, जो समुदाय वास्तव में अब तक देख रहा है या जो बासी हो गया है।

रूबी और रूबी ऑन रेल्स में याद रखें कि हमेशा ऐसा नहीं होता है जो बेहतर मणि के लिहाज से अच्छा हो, लेकिन आपके प्रोजेक्ट में सबसे अच्छा है।


एक अन्य विकल्प यह है कि नीचे दिए गए मॉड्यूल को मॉड्यूल में शामिल करें और आप को तालिका में Cort_token जोड़ें।

एप्लिकेशन / मॉडल / चिंताओं / token_authenticable.rb

module TokenAuthenticatable
  extend ActiveSupport::Concern

  included do
    before_save :ensure_auth_token
  end

  module ClassMethods
    def find_by_token(token)
      find_by(auth_token: token)
    end
  end

  def ensure_auth_token
    self.auth_token = generate_auth_token if auth_token.blank?
  end

  private

  def generate_auth_token
    loop do
      token = Devise.friendly_token
      break token unless self.class.exists?(auth_token: token)
    end
  end
end

एप्लिकेशन / नियंत्रक / API / v1 / login_controller.rb

...
 def login_user(params)
    if params[:authentication]
      @user = User.find_by(auth_token: params[:authentication])
      if @user.nil?
        render json: err('login user by token failed', ERR_USER_NOT_FOUND), status: :not_found
        event('login_user_by_auth_failed', 'token', params[:authentication])
        return
      else
        render status: :ok, json: @user
        return
      end
    else
      user = user.find_by(email: params[:email])
      if user.nil?
        event('login_user_failed_not_found', 'user_email', params[:email])
        render json: err("login user not found #{params[:email]}", ERR_USER_NOT_FOUND), status: :not_found
        return
      end
      if user.access_locked?
        event('login_user_blocked', 'user_id', user.id)
        render json: err("login user account is locked : #{user.id}", ERR_USER_LOCKED), status: :unauthorized
        return
      end
      unless user.try(:valid_password?, params[:password])
        event("login_user_password_does_not_match #{user.id}", 'user_id',  user.id)
        render json: err('login user password does not match', ERR_PASSWORD_NOT_MATCH), status: :unauthorized
        return
      end
      event('login_user_succeeded', 'user_id', user.id)
      @user= user
      if @user.save
        response.headers['authentication'] = @user.auth_token
        render status: :ok, json: @user
        return
      else
        render json: @user.errors, status: :unprocessable_entity
        return
      end
    end
  end
...

संपादित करें: सही कोड-ब्रेकिंग टाइपो


पहेली रत्न एपीआई-केवल रूबी ऑन रेल अनुप्रयोगों में टोकन प्रमाणीकरण के लिए डेविस रणनीति प्रदान करता है। इसकी मुख्य विशेषता प्रति उपयोगकर्ता कई टोकन के लिए समर्थन है

https://github.com/adamniedzielski/tiddle





rails-api