2013-05-22 3 views
0

В настоящее время я работаю над применением рельсов Spree (v 1.3.x).Как использовать omniauth для аутентификации пользователей из пользовательского приложения Rails?

У меня есть еще одно приложение, которое я создал пару месяцев назад, только предположим, что myfirstapp.com, который является живым, и поэтому многие пользователи создали учетную запись в этом приложении, чтобы теперь они были зарегистрированными пользователями.

Итак, теперь я хочу в моем новом приложении, которое является один я сейчас работаю над только предположить, что это ** mysecondapp.com позволить зарегистрированным пользователям (то есть пользователям, которые создали учетную запись на myfirstapp.com) в sign_in в моем втором приложении, не используя мой secondapp процесс регистрации. Они должны пройти аутентификацию с myfirstapp.com и войти в мой secondapp. **

Любой способ достичь этого?

+0

Вы пробовали что-нибудь? – PinnyM

+0

Существует красивый railscast для этого http://railscasts.com/episodes/241-simple-omniauth?view=comments – Salil

ответ

0

Я думаю, что вы можете использовать свою первую аутентификацию приложения на втором, вы можете создать ссылку так же, как facebook или twitter с перенаправлением на контроллер, а затем этот контроллер отправит запрос в ваше первое приложение (вам понадобится безопасность код, чтобы сделать это), а затем получить ответ, сохранить данные, которые вы хотите (user_id или счета) и работает отлично ...

Api класса с использованием protect_from_forgery:

class ApiController < ApplicationController 
    protect_from_forgery :except => 'custom_login' 
end 

Делая это, вы избежите по умолчанию защита рельсов, с проверками

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%> 

Обычно используется для рельсовых форм. Тогда вы можете реализовать свой секретный хэш-код, и проверяет это нравится:

class ApiController < ApplicationController 
protect_from_forgery :except => :login_from_app2 

def login_from_app2 
    if params[:authentication] == auth_hash 
     if login(params[:user_credentials]) 
      render :text => "Success" #better you return a json 
     else 
      render :text => "Fail login" #better you return a json 
     end 
    else 
     render :text => 'Invalid security hash' 
    end 
end 


def auth_hash 
    "8f2e4b354f193744272fe246ca9e8bf5" 
end 

end 

Таким образом, у вас есть код только app2 будет посылать на «пост» запрос на доступ app1 и вы можете контролировать вход.

Я не знаю, является ли это на 100% безопасным, я думаю, что это так, но я буду рад, если кто-нибудь сможет объяснить, почему это не очень хороший подход в этом случае.

+0

Спасибо Vinicius. Я обязательно попробую это. –

+0

Я знаю, что это не «omniauth», но omniauth создан для работы с процессом аутентификации Twitter и Facebook и т. Д., У которых есть личный механизм выполнения процесса аутентификации, чтобы использовать драгоценный камень, сначала нужно иметь свой собственный системы аутентификации и реализовать это на вашем «личном омнауте», –

Смежные вопросы