Rails/React 애플리케이션에서 Twitter OAuth 라이센스 정복
Rails/React 애플리케이션에서 OAuth 인증이 필요한 트위터 API 요청을 생성하는 빠른 연습입니다.트위터 개발자 계정, 읽기와 쓰기 권한이 있는 프로그램, 그리고 프로그램의 API 키와 API 키가 필요합니다.개발자 포털에 프로그램에 리셋 URL을 추가해야 합니다.나는 응용 프로그램을 건의한다.com/auth/twitter/callback.
Twitter에서 클라이언트 자격 증명을 호출하는 방법에는 여러 가지가 있지만 간단하게 유지하기 위해 API 키와 API 기밀을 사용합니다.
단독 Rails API 백엔드를 사용하여React 프로그램을 구축한 적이 있다면, 각종 소셜 미디어 플랫폼의 권한을 처리하기 위해omniauth와omniauth 트위터gems를 사용할 수 있습니다.그러나, 예를 들어 나의 소셜 미디어 조수 프로그램, 독립된 전단과 백엔드 (즉 보기를 전혀 사용하지 않는 것) 가 없다면,omniauthgem를 쉽게 사용할 수 없을 것이다.
반대로, 우리는 oauth와httparty를 사용할 것이다.
트위터의 세 다리 OAuth 흐름은 세 단계로 구성됩니다.
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를 프런트엔드에 연결하는 작업으로 호출할 수 있습니다.
Reference
이 문제에 관하여(Rails/React 애플리케이션에서 Twitter OAuth 라이센스 정복), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lizlaffitte/conquering-twitter-oauth-authorization-in-a-rails-react-app-49di텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)