RailsアプリケーションをOAuth2プロバイダーとして機能させたい。
私はRuby開発に比較的慣れていませんが、RubyでOAuth2を簡単に開発しているように見えます。
Webで多くのOAuth2ライブラリを見ましたが、Railsプロジェクトで実装する方法がわかりません。
私を助けてください。
RailsアプリケーションをOAuth2プロバイダーとして機能させたい。
私はRuby開発に比較的慣れていませんが、RubyでOAuth2を簡単に開発しているように見えます。
Webで多くのOAuth2ライブラリを見ましたが、Railsプロジェクトで実装する方法がわかりません。
私を助けてください。
あなたが達成しようとしていることについてより具体的にすることができればそれは助けになるでしょう。たとえば、GoogleやFacebookを使用してOauth2を使用するユーザーを承認したいとします。
Deviseの宝石をお勧めします。
https://github.com/plataformatec/devise
Facebookなどの多くのプロバイダーを介して承認するために使用できます
https://github.com/mkdynamic/omniauth-facebook
またはGoogle
https://github.com/zquestz/omniauth-google-oauth2
アップデート
Facebook認証の手順
GemをGemfileに追加します
gem 'devise'
コマンドラインから実行します。
bundle install
次に、次のコマンドを実行します
rails generate devise:install
rails generate devise user
rake db:migrate
ここで、userは、ユーザー情報を格納するモデルです。
モデルにいくつかのフィールドを追加する必要があります
rails generate migration add_columns_to_user email:string provider:string
rake db:migrate
次に、ユーザーを承認するためにアプリIDと秘密鍵が必要になるため、Facebookアプリを作成します
これをconfig/initializers/constants.rbに追加します
APPID = 'YOUR_APP_ID'
FBKEY = 'YOUR_FB_KEY'
次のコードをconfig/initializers/devise.rbに追加します
require 'devise/orm/active_record'
require "omniauth-facebook"
config.omniauth :facebook, APPID, FBKEY
config/routes.rbの下部に次のコードを追加します
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
deviseが別のdevise_forルートを追加していないことを確認し、routes.rbにルートがすでに存在する場合は削除して、上記のコードを追加します
次のコードをapp/models/user.rbファイルに追加します
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :provider, :uid, :email, :password, :password_confirmation, :remember_me
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
unless user
user = User.create( provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20]
)
end
user
end
アプリ/コントローラーにusersというディレクトリを追加します
mkdirユーザー
次に、次のコードを含むファイルomniauth_callbacks_controller.rbをusersdirに追加します。
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
次のコードをビューに追加します
<% if current_user%>
<%= current_user.email %>
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
<% else %>
<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>
<% end%>