èªç¤¾ãµã¼ãã¹ã®æ©è½ãç°¡åã«APIã§æä¾åºæ¥ã¦ãã¾ãï¼gem doorkeeperãåãã
èªç¤¾ãµã¼ãã¹ã«APIãå®è£
ããäºã£ã¦ãã¾ããªãã§ãããã
kamadoã®ãããã¯ããç¾å¨ã¯APIã¯å
¬éãã¦ã¾ããã
ããæä¾ããã®ã§ããã°ãç°¡æçãªæ¹æ³ã§ãããã¦ã¼ã¶ã¼ãã¼ãã«ã«tokenã«ã©ã ã追å ãã¦ãAPIç¨ã®ã«ã¼ãã£ã³ã°ã使ããâ¦ã¨ããæ¹æ³ãèããããã¨æãã¾ãã
ãããããã®å®è£ æéã§ããè¯ãAPIãå®è£ åºæ¥ãã¨ãããç´ æ´ãããã§ãããã
ããã§ç´¹ä»ãããã®ãgem doorkeeperã§ãã
æ¥æ¬èªã®è¨äºãè¦å½ãããªãã£ãã®ã§è¨äºã«ãã¾ããã
gem doorkeeperã£ã¦ã©ããªæ©è½ãããã®ãï¼
ç°¡åã«èª¬æããã¨ã
ã»ã¢ããªã±ã¼ã·ã§ã³ã®ç®¡çæ©è½
ã»ã¢ããªã±ã¼ã·ã§ã³ã®æ¿èªç®¡ç
ã»ã¹ã³ã¼ãã®è¨å®
ãã£ã¦ãã¾ãã°ãFacebook API(ã«è¿ãå®è£
)ãã®ã¾ã¾å®è£
åºæ¥ã¾ãã
ãããOAuth2.0ãå©ç¨ã§ãã¾ãï¼ â è¶
éè¦
å®éã«ãã£ã¦ã¿ã
Gemfileã«è¿½å
gem 'doorkeeper', '~> 0.4.2'
ã³ãã³ãã®å®è¡
bundle install rails generate doorkeeper:install rails generate doorkeeper:migration rake db:migrate
ããã§config/initializers/doorkeeper.rbã使ãããDBããã¤ã°ã¬ã¼ãããã¾ãã
次ã«routesã«è¿½å
mount Doorkeeper::Engine => '/oauth'
以ä¸ãroutesã«è¿½å ããã¾ãã
Routes for Doorkeeper::Engine: authorization GET /authorize(.:format) doorkeeper/authorizations#new authorization POST /authorize(.:format) doorkeeper/authorizations#create authorization DELETE /authorize(.:format) doorkeeper/authorizations#destroy token POST /token(.:format) doorkeeper/tokens#create applications GET /applications(.:format) doorkeeper/applications#index POST /applications(.:format) doorkeeper/applications#create new_application GET /applications/new(.:format) doorkeeper/applications#new edit_application GET /applications/:id/edit(.:format) doorkeeper/applications#edit application GET /applications/:id(.:format) doorkeeper/applications#show PUT /applications/:id(.:format) doorkeeper/applications#update DELETE /applications/:id(.:format) doorkeeper/applications#destroy authorized_applications GET /authorized_applications(.:format) doorkeeper/authorized_applications#index authorized_application DELETE /authorized_applications/:id(.:format) doorkeeper/authorized_applications#destroy
config/initializers/doorkeeper.rbã®ç·¨éã
èªè¨¼ã·ã¹ãã ã«deviseã使ç¨ãã¦ããå ´åä¸è¨ã®æ§ã«ããã
resource_owner_authenticator do |routes| current_user || warden.authenticate!(:scope => :user) end
ã³ã³ããã¼ã©ã¼ã®ä½æ
app/controllers/api/v1/users_controller.rb
class Api::V1::UsersController < ApplicationController doorkeeper_for :all before_filter :validate_token before_filter :set_parameters skip_before_filter :verify_authenticity_token # allow CSRF def index render json: current_user end def validate_token return head(401) unless doorkeeper_token end def set_parameters sign_in 'user', User.find(doorkeeper_token.resource_owner_id) end end
ããã§å®è£
å®äºã§ãã
ç»é¢ã§ç¢ºèªãã¦ã¿ã¾ãã
OAuthãããã¤ãã¼å´ã®ç»é¢é·ç§»ç¢ºèª
/oauth/applicationsã§ã¢ããªã±ã¼ã·ã§ã³ã®ä½æãè¡ãã¾ãã
OAuthã¯ã©ã¤ã¢ã³ãå´ã®å®è¡ç¢ºèª
å®éã«ã¯ã©ã¤ã¢ã³ãå´ãã確èªãã¦ã¿ã¾ãã
ä¸è¨ã«exampleãããã®ã§ç¢ºèªã«ä¾¿å©ã§ãã
https://github.com/applicake/doorkeeper-devise-client
ãã¡ããåºæ¥ã¦ã¾ããï¼
OAuthã¯ã©ã¤ã¢ã³ãå´(CUI)ã®å®è¡ç¢ºèª
CUIããã確èªãã¦ã¿ã¾ãã
ãªãã¤ã¬ã¯ãURL使
require 'oauth2' #clientã®ä½æ client = OAuth2::Client.new('c5e0e923b1a257029f22dfec34056c4908f07aae67d2b00ec42d2c6e5a131637', '7f90a491763d8fe5b0419b7bc0d52c762cc2000e8d892b57f814e6aef23541c4', :site => 'http://localhost:5000') # èªè¨¼ã¸ã®ãªãã¤ã¬ã¯ãURL使 p client.auth_code.authorize_url(:redirect_uri => 'http://localhost:3000/users/auth/doorkeeper/callback') #=> "http://localhost:5000/oauth/authorize?response_type=code&client_id=c5e0e923b1a257029f22dfec34056c4908f07aae67d2b00ec42d2c6e5a131637&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fusers%2Fauth%2Fdoorkeeper%2Fcallback"
ãã¼ã¯ã³ã®åå¾
# ãã¼ã¯ã³ã®åå¾ p client.auth_code.get_token('90cfef8de3a3c5712c6a95acd9e48f7f5355265ec462378a58c56748fd743932', :redirect_uri => 'http://localhost:3000/users/auth/doorkeeper/callback').token #=> "38c5fcdb2d1c90d63593859c367d999049ba084817a688347e7664b24dcfed10"
APIå®è¡
p OAuth2::AccessToken.new(client, "38c5fcdb2d1c90d63593859c367d999049ba084817a688347e7664b24dcfed10").get('/api/v1/users').body #=> {...}
æ¿èªæ¸ã¿ã¢ããªã±ã¼ã·ã§ã³ã®ç®¡ç
æ¿èªæ¸ã¿ã®ã¢ããªã±ã¼ã·ã§ã³ã表示ããviewãç¨æããã¦ããã®ãæ°ãããã¦ãã¾ãã
OAuthã§APIãæä¾åºæ¥ãã¡ãªãã
OAuthã§éä¿¡åºæ¥ãã¡ãªããã£ã¦è²ã
ããã¨æãã®ã§ãããæ¢ã«åå¨ããgem oauth2çãå©ç¨ã§ããäºã§APIãå®è¡ããããã®ããã±ã¼ã¸ãç°¡åã«å®è£
åºæ¥ãã®ãç´ æ´ãããã§ããã
è©°ã¾ã£ãã
exampleãããã¾ãã
https://github.com/applicake/doorkeeper/wiki/Example-Applications
ã¾ã¨ã
ãã£ã¨è©¦ãã¦ã¿ã¾ããããgem doorkeeperã§ãããªã«ç°¡åã«APIãå®è£
åºæ¥ããªãã¦ç´ æ´ãããã§ããã
[PR]Spreeã®æ å ±ãéãã¦ãã¾ãã
ECãæã¡ããæ¹ãä»äºã§ECã使ãããæ¹åãã®ã³ãã¥ããã£ãµã¤ãã§ãã
ãã®ãµã¤ãã§ã¯ä¸çã§æã使ç¨ããã¦ããECã®1ã¤ã§ããSpreeã«ã¤ãã¦ã®æ
å ±ãæä¾ãã¦ãã¾ãã
http://spreecommerce.jp/