Rails/React 애플리케이션에서 Twitter OAuth 라이센스 정복

Cover Photo by Brett Jordan from Pexels
Rails/React 애플리케이션에서 OAuth 인증이 필요한 트위터 API 요청을 생성하는 빠른 연습입니다.트위터 개발자 계정, 읽기와 쓰기 권한이 있는 프로그램, 그리고 프로그램의 API 키와 API 키가 필요합니다.개발자 포털에 프로그램에 리셋 URL을 추가해야 합니다.나는 응용 프로그램을 건의한다.com/auth/twitter/callback.
Twitter에서 클라이언트 자격 증명을 호출하는 방법에는 여러 가지가 있지만 간단하게 유지하기 위해 API 키와 API 기밀을 사용합니다.
단독 Rails API 백엔드를 사용하여React 프로그램을 구축한 적이 있다면, 각종 소셜 미디어 플랫폼의 권한을 처리하기 위해omniauth와omniauth 트위터gems를 사용할 수 있습니다.그러나, 예를 들어 나의 소셜 미디어 조수 프로그램, 독립된 전단과 백엔드 (즉 보기를 전혀 사용하지 않는 것) 가 없다면,omniauthgem를 쉽게 사용할 수 없을 것이다.
반대로, 우리는 oauth와httparty를 사용할 것이다.
트위터의 세 다리 OAuth 흐름은 세 단계로 구성됩니다.
  • POST oauth/request 토큰
  • 귀하의 신청은 우편으로 발송됩니다.
  • 요청에는 API 키 및 API 키 비밀이 포함됩니다
  • .
  • 성공하면 응답을 요청하면 영패와 영패 키
  • 를 되돌려줍니다
  • oauth/authorize
  • 가져오기
  • 응용 프로그램에서 GET 요청이 전송됩니다.
  • 이전에 되돌아온 영패를 매개 변수로 요청합니다.
  • 당신의 응용 프로그램 사용자는 당신의 응용 프로그램에 권한을 부여받을 것을 요구할 것이다
  • 성공하면 사용자는 개발자 포털
  • 에서 지정한 리셋 URL로 리디렉션됩니다.
  • 요청 응답에는 oauth 영패와 oauth 검증기
  • 가 포함됩니다.
  • POST oauth/access 영패
  • 당신의 응용 프로그램은
  • 이전에 되돌아온 oauth 영패와 oauth 검증기를 매개 변수로 요청합니다.
  • 우선, 프로그램의 GEM 파일에 oauth와 HttpParty를 의존항으로 추가합니다.
    Gemfile
    gem 'httparty'
    gem 'oauth'
    
    실행 확인$bundle install.
    다음은 추적되지 않은 환경 변수로 API 키와 API 키 기밀을 저장합니다.환경 파일.
    버전 제어 시스템 추적 파일에 API 키 또는 기타 중요한 정보를 저장하지 마십시오.또는 액세스할 수 있는 공공장소(예: GitHub)에 업로드합니다.
    에반 선생
    KEY=THISISOBVIOUSLYNOTMYAPIKEYREPLACEWITHYOURS
    SECRET=AGAINTHISISJUSTANEXAMPLE
    
    다음 단계에서는 세션 컨트롤러 생성 작업에 리셋 URL을 연결합니다.
    /구성/라우팅rb
      get '/auth/:provider/callback', to: "sessions#create"
    
    이제 우리는 세 다리의 OAuth 프로세스를 시작할 준비가 되어 있다.

    1단계: oauth/request 토큰 게시
    우리는 모든 소셜 미디어 API 호출을 전문적으로 처리하는 컨트롤러에서 API 호출을 진행할 것이다.
    어플리케이션/컨트롤러/소셜 컨트롤러.rb
    require 'pry'
    require 'oauth'
    class SocialController < ApplicationController
        def create
            ckey = ENV['KEY']
            csecret = ENV['SECRET']
            consumer = OAuth::Consumer.new(ckey,csecret,
                :site => 'https://api.twitter.com',
                :authorize_path => '/oauth/authenticate',
                :debug_output => false)
            callback_url = "http://127.0.0.1:3000/auth/twitter/callback"
            request_token = consumer.get_request_token(:oauth_callback => callback_url)
            token = request_token.token
            token_secret = request_token.secret
            confirmed = request_token.params["oauth_callback_confirmed"]
            if confirmed === "true"
                redirect_to "https://api.twitter.com/oauth/authorize?oauth_token=#{token}"
            else
                redirect_to "/"
            end
        end
    end
    
    이 방법에서는 우선 API 키와 API 키 기밀을 저장해야 합니다.env 파일을 국부 변수로 변경합니다.
    def req_token
      ckey = ENV['KEY']
       csecret = ENV['SECRET']
    …
    end
    
    그리고 우리는 API 키와 비밀번호를 전달하고 API 요청을 보내는 사이트, 권한 수여 경로를 만들고 debug output을false로 설정합니다.
    def req_token
    …
            consumer = OAuth::Consumer.new(ckey,csecret,
                :site => 'https://api.twitter.com',
                :authorize_path => '/oauth/authenticate',
                :debug_output => false)
    …
    
    그런 다음 리셋 URL을 로컬 변수에 저장합니다.그리고 Google은 소비자 실례에서 get request token을 호출하여 리셋 변수를 전송하고 응답을 Request token으로 저장해서 POST 요청을 보냅니다. (단계 1A-b)그리고 이 응답을 사용하여 되돌아오는 영패와 영패 키를 저장합니다. (1c 단계)

    2단계: oauth/authorize 가져오기
    def req_token
    …
    callback_url = "http://127.0.0.1:3000/auth/twitter/callback"
    request_token = consumer.get_request_token(:oauth_callback => callback_url)
    token = request_token.token
     token_secret = request_token.secret
    …
    end
    
    우리의 요청이 성공했는지 확인하기 위해서, 요청 영패에 oauth callback confirm이 포함되어 있는지 확인하고 있습니다.만약 그렇다면, 우리는 (단계 2a) 로 방향을 바꾸고, 방금 저장한 영패를 매개 변수로 URL (단계 2b) 에 추가할 것입니다.
    def req_token
    …
    confirmed = request_token.params["oauth_callback_confirmed"]
            if confirmed === "true"
                redirect_to "https://api.twitter.com/oauth/authorize?oauth_token=#{token}"
            else
                redirect_to "/"
            end
        end
    
    이것은 OAuth 흐름의 한 점입니다. 사용자가 프로그램의 방향을 바꾸고 권한을 부여할 것을 요구할 것입니다.만약 그들이 이렇게 한다면, 그들은 응용 프로그램으로 다시 지정될 것이다.com/auth/twitter/callback, 세션 #create에 연결합니다.

    3단계: oauth/access 토큰 게시
    예를 들어, 흐름의 나머지 부분은 세션 #create에 저장됩니다.
    
    def create
            if params[:oauth_token] && params[:oauth_verifier]
                oauth_token = params["oauth_token"]
                oauth_verifier = params["oauth_verifier"]
                baseUrl = 'https://api.twitter.com/oauth/access_token'
                response = HTTParty.post(baseUrl + "?oauth_token=#{oauth_token}&oauth_verifier=#{oauth_verifier}" )
                @access_token = response.split("&")[0].split("=")[1]
                @access_secret = response.split("&")[1].split("=")[1]
                @user_id = response.split("&")[2].split("=")[1]
                @user_sn = response.split("&")[3].split("=")[1]
                user = User.find_by(username: @user_sn)
                if user
                    session[:user_id] = user.id
                    render json: UserSerializer.new(user)
                else
                    new_user_info = get_user(@user_sn)
                     new_user = User.new(username: new_user_info[“name”], password: SecureRandom.hex, uid: @user_id )
                    if @user.save
                       log_in(@user)
                      else
                      render :new
                    end
                    render json: new_user_info
    …
                end
            end
        end
    
    단계 2e에서 약속한 매개 변수를 되돌려주면 HTTParty를 사용하여 Post 요청을 보내서 기본 URL에 전달합니다.
    이렇게!기본 지식을 습득하면 API를 프런트엔드에 연결하는 작업으로 호출할 수 있습니다.

    좋은 웹페이지 즐겨찾기