Вот краткий обзор моего текущий процесс аутентификации:

- Пользователь выбирает «войти через Facebook» в мобильном клиенте, клиент
перенаправляется в приложение Facebook и запрашивает access_token - В случае успеха Facebook отвечает с токеном доступа, и клиент
перенаправляется обратно в мое приложение. - Клиент отправляет токен доступа в мой API p>
- Мой API использует драгоценный камень коалы, чтобы проверить действителен ли токен доступа.
- Если токен действителен, Facebook отправляет данные пользователя в API
где создается новый пользователь. Если пользователь уже существует, мой API отправляет данные пользователя.
Код: Выделить всё
def self.authenticate_user_from_facebook(fb_access_token)
user = User.new
graph = Koala::Facebook::API.new(fb_access_token)
profile = graph.get_object('me')
#user['fb_id'] = profile['id']
#user['fb_token'] = fb_access_token
# Generate user hash
uhash = Hash.new
uhash['provider'] = 'facebook'
uhash['uid'] = profile['id']
uhash['info'] = Hash.new
uhash['info']['nickname'] = profile['username']
uhash['info']['name'] = profile['name']
uhash['info']['email'] = profile['email']
uhash['info']['first_name'] = profile['first_name']
uhash['info']['last_name'] = profile['last_name']
uhash['info']['verified'] = profile['verified']
uhash['info']['urls'] = Hash.new
uhash['info']['urls']['Facebook'] = profile['link']
uhash['credentials'] = Hash.new
uhash['credentials']['token'] = fb_access_token
uhash['extra'] = Hash.new
uhash['extra']['raw_info'] = Hash.new
#Save the new data
user = User.apply_auth(uhash)
return user
end
def self.apply_auth(uhash)
User.where(:uid => uhash['uid'], :provider => uhash['provider']).first_or_create do |user|
user.provider = uhash['provider']
user.uid = uhash['uid']
user.nickname = uhash['info']['nickname']
user.email = uhash['info']['email']
user.name = uhash['info']['name']
user.first_name = uhash['info']['first_name']
user.last_name = uhash['info']['last_name']
end
end

На шаге 2 API использует koala для проверки токена доступа пользователей. Это делается путем применения следующего before_filter ко всем контроллерам.
Код: Выделить всё
before_filter :current_user
Код: Выделить всё
def current_user
@current_user ||= User.authenticate_user_from_facebook(params[:access_token])
end
Сейчас я пытаюсь добавить аутентификацию только с использованием имени пользователя и пароля.
Вещи, которые я рассмотрел
Я постоянно ссылался на Railscast 235, 209, 250, 82 и читал об OAuth2. У меня есть базовое представление о том, как работает аутентификация, но у меня возникли проблемы с его применением к текущему процессу аутентификации.
Разработать аутентификацию по токену
Ссылка на Railscast 235 , 209, и это сообщение в блоге:
http://matteomelani.wordpress.com/2011/ ... e-devices/
Я понимаю как войти в систему и подтвердить пользователя, который входит в систему с именем пользователя и паролем. Однако я не понимаю, как это будет сочетаться с моим процессом входа в Facebook. Я не понимаю, как создать сеанс с помощью devise для пользователя, у которого уже есть токен доступа, сгенерированный Facebook.
OAuth2
Создание моего API поставщик OAuth2 кажется хорошим вариантом, но перенаправление в браузер кажется глупым, и я не знаю, возможно ли перенаправить обратно из браузера в мое приложение.Аутентификация с нуля
Это вариант, который я подумываю использовать, но я бы заново изобрел велосипед.
Любой совет приветствуется!
Подробнее здесь: https://stackoverflow.com/questions/189 ... assword-or