こんにちは、ember-cli-simple-auth-torii を備えたフロントエンドと、devise と omniauth-facebook を備えた ember-cli-simple-auth-devise バックエンドを備えた ember アプリを持って います。
Facebookでログインすると鳥居から認証コードが渡されますが、この認証コードをどうするかは私たち次第です。
サーバー側に対してユーザーを認証することをお勧めします。この認証コードをオムニ認証で使いたいです。
私の AuthenticationController は次のようになります
class AuthenticationsController < Devise::OmniauthCallbacksController
def facebook
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
...
sign_in(:user,user)
end
end
私のセッションコントローラー
class SessionsController < Devise::SessionsController
def create
respond_to do |format|
format.html { super }
format.json do
binding.pry
self.resource = warden.authenticate!(auth_options)
sign_in(resource_name, resource)
data = {
user_token: self.resource.authentication_token,
user_email: self.resource.email
}
render json: data, status: 201
end
end
end
end
私のアプローチが正しいかどうかはわかりませんがusers/auth/facebook/callback
、クライアントから を呼び出すと、サーバー側で認証プロセスがトリガーされ、アプリでの crud 操作に対して後でユーザーを承認できると思います。
authenticateWithFacebook: function(provider) {
var self = this
this.get('session').authenticate('simple-auth-authenticator:torii', "facebook-oauth2" ).then(function() {
var authorizationCode= self.get('session.authorizationCode');
console.log(authorizationCode);
Ember.$.ajax({
type: 'POST',
url: 'http://localhost:3000/users/auth/facebook/callback',
dataType: 'json',
data: {
code: authorizationCode,
},
success: function(data, textStatus, jqXHR) {
// Handle success case
},
error: function(jqXHR, textStatus, errorThrown) {
// Handle error case
}
});
});
},
私のサーバー ログには、omniauth facebook ログイン コールバック フェーズを開始できると書かれていますが、エラーが発生します。Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request
Started POST "/users/auth/facebook/callback" for 127.0.0.1 at 2014-11-16 11:03:44 +0530
I, [2014-11-16T11:03:44.926842 #5160] INFO -- omniauth: (facebook) Callback phase initiated.
E, [2014-11-16T11:03:46.185161 #5160] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}
Processing by AuthenticationsController#failure as HTML
Parameters: {"code"=>"AQBaag8FhEzyd8qCMh14HbAl-iBXrpK1YSrP9vz72kzRE86S-cf0Vsf1sSfpR1-Fajr1QfUbAoyYqj3ivcXayGk5KcmT27b4avy1NAcLzM2FcW1neGS9RA6CoVhYXpj2rbjYY7Dm-1Qw6Me0RjiidwJxwF4SVUVX4S6Y5UatRMW6FW2IyKxJJy8e0-VYlmFBpv3VKjq3tYE_pdM6lKLTEBAyApvIm2UfTZXLqeWWIIIf3romLB-q48BXvv2koM5fSkrvB2HyPOJq9Y_RLeWtw4nARn8aluJC-KhyYfUcprf_KzM30ZBYNxu5S6IYkgcdq_kwEsHinoddDqe-"}
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 62ms (ActiveRecord: 0.0ms)
確認コードの検証中にエラーが発生しました。redirect_uri が OAuth ダイアログ リクエストで使用したものと同じであることを確認してください。 クライアント側のポート 4200 から Facebook サーバーを呼び出しており、ajax 呼び出しでは URL http:// localhost :3000/users/auth/facebook/callbackを使用しています。ポート 3000
クライアント側からの ajax 呼び出しで /users/auth/facebook/callback を使用すると、エラーが発生します: Invalid redirect ie type: 'POST', url: '/users/auth/facebook/callback', dataType: 'json',
2014-11-16 11:27:40 +0530 I、[2014-11-16T11:27:40.150441 #5160] INFO -- omniauth: ( facebook) コールバック フェーズが開始されました。E, [2014-11-16T11:27:41.336997 #5160] エラー -- omniauth: (facebook) 認証失敗!invalid_credentials: OAuth2::Error, : {"error":{"message":"無効な redirect_uri: \u0926\u093f\u0932\u0947\u0932\u0940 URL \u0905\u0928\u0941\u092a\u094d\u0930\u092f\ u094b\u0917 \u0915\u0949\u0928\u094d\u092b\u093f\u0917\u0930\u0947\u0936\u0928\u0926\u094d\u0935\u093e\u0930\u0947 \u0905\u0928\u0941\u092e\u0924 \u0928\ u093e\u0939\u0940.","type":"OAuthException","code":191}} AuthenticationsController#failure as JSON パラメータによる処理: {"code"=>"
私のアプローチが正しいかどうかはわかりません。工夫+鳥居認証両方したい