Ember-Simple-Auth-Torii: Как я могу обработать авторизацию на стороне сервера с помощью devise-omniauth
Привет, у меня есть приложение ember с внешним интерфейсом с бэкэндом ember-cli-simple-auth-torii и ember-cli-simple-auth- devise с devise и omniauth-facebook
Torii дает вам код авторизации при входе через 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
Мой SessionsController
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. Я звоню на сервер Facebook с моего клиентского порта: 4200, а мой вызов ajax использует URL http: // localhost:3000/users/auth/facebook/callback порт 3000
Когда в моем ajax-вызове со стороны клиента я использую / users / auth / facebook / callback, я получаю сообщение об ошибке: Неверное перенаправление, то есть тип: 'POST', url: '/users/auth/facebook/callback', dataType: 'json',
Запущен POST "/users/auth/facebook/callback" для 127.0.0.1 в 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\u0947 \ u0990 \u0928\u0941 \ u092a \ u094d \ u0930 \ u092f \ u092f \ u092f \ u094b \ u0915\u0949 \ u094d \ u093b \ u0917 \ u0930 \ u0936 \ u0936 \ u0926 \ u094d \ u0993e \ u0930 \ u0930 \ u0905\u0928\u0928\u0941 \ u0940 u093e \ u0939 \ u0940 "" тип ":"OAuthException","код":191}} Обработка AuthenticationsController# провал как JSON Параметры: { "код"=>"AQD38nHY4xvZnGdaFNJrjcIiBaSMPa3ZLsr3jpV8aPRoFHPGOTITGMtPZ9sA7pts41JnObhCsK3fLTI64Z-7YJi2PQGL7_O1i5m8GF57dGBYegxnSOZJAYxhiuxnIwxp4uhw4OBz61hthtOsF1BNw0bK3LNQJbJPXK0LO0HxasZ0d06swFcp4t8mminRhv6Qsx7ZQVCrOs7oonYfyNxGQiVUB7UM6u7JcPVYaySfJQR1QkMKnLvQ058kbKEUaIvvUyrLE73Gjs_i4mgb4SBAZMbR3c1qVlPgZ-75cIsyqmttmqhO-y4NgEAOPh"} Перенаправить к http: // 127.0.0.1:3000/users/sign_in Завершено 302 Найдено за 74 мс (ActiveRecord: 0,0 мс)
Я не знаю, правильный ли мой подход. Я хочу иметь devise + torii аутентификацию как
1 ответ
// Это сработало для меня, ожидая более элегантного пути.
authenticateWithFacebook: function(provider)
{
var self = this;
this.get('session').authenticate('simple-auth-authenticator:torii', "facebook-connect" ).then(function()
{
var access_token= self.get('session.accessToken');
Ember.$.ajax({
type: 'POST',
url: 'http://localhost:3000/users/auth/facebook_access_token/callback',
dataType: 'json',
data: {
access_token : access_token,
},
success: function(data, textStatus, jqXHR) {
// Handle success case
},
error: function(jqXHR, textStatus, errorThrown) {
// Handle error case
}
});
self.transitionTo('dashboard');
});
},