У меня была интеграция instam omniauth, работающая сейчас в течение нескольких лет, и я ничего не менял в течение долгого времени, но мои клиенты иногда не в синем, получая сообщение об ошибке при подключении своих учетных записей Instagram :Instagram Omniauth on Rails invalid_credentials
Started GET "/auth/instagram/callback?code=d3b1c4d88e2f440b8a8a98037b821c15&state=2565d32ecd3cc5967f32d8c945db6ffba74dc784100777f2" for 127.0.0.1 at 2016-12-15 15:29:59 -
0800
I, [2016-12-15T15:29:59.276712 #32520] INFO -- omniauth: (instagram) Callback phase initiated.
E, [2016-12-15T15:29:59.519801 #32520] ERROR -- omniauth: (instagram) Authentication failure! invalid_credentials: OAuth2::Error, :
{"code": 400, "error_type": "OAuthException", "error_message": "Matching code was not found or was already used."}
единственный способ, которым я могу последовательно получить, чтобы это произошло, чтобы подключить учетную запись из моего приложения, а затем удалить разрешения с конца Instagram, а затем снова попытайтесь восстановить на мое приложение, но кажется, что некоторые из мои клиенты получают это при первом подключении своих учетных записей instagram.
Кто-нибудь сталкивался с этим раньше? Мой конфиг/Инициализаторы/omniauth.rb выглядит следующим образом:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :instagram, ENV['INSTAGRAM_CLIENT_ID'], ENV['INSTAGRAM_CLIENT_SECRET'], scope: 'basic comments public_content'
end
Edit:
Я использую OmniAuth 1.3.1 и OmniAuth-Instagram 1.0.2
Мои маршруты - это только ваш основной маршрут omniauth:
get '/auth/:provider/callback', to: 'omniauth_callbacks#create'
И мои действия контроллера немного сложным, но это выглядит следующим образом:
class OmniauthCallbacksController < ApplicationController
def create
if user_signed_in?
social_account = SocialAccount.from_omniauth(auth_params, current_user)
social_account.save!
redirect_to root_path
else
user = User.from_omniauth auth_params
sign_in_and_redirect user
end
end
private
def auth
request.env['omniauth.auth']
end
def auth_params
{
provider: auth['provider'],
uid: auth['uid'],
token: auth['credentials']['token'],
secret: auth['credentials']['secret'] || auth['credentials']['refresh_token'],
name: auth['info']['nickname'] || auth['info']['name'],
emails_sent: 0
}
end
end
В основном это создает нового пользователя и подписывает их в случае, если они не связаны, и он обновляет свою информацию для входа, если они есть.
Не могли бы вы добавить более подробную информацию, такую как файл маршрутов и ваш контроллер, который получает обратный вызов? Какую версию Omniauth и Instagram Omniauth вы используете? –
@AlexanderLuna Я добавил редактирование сообщения, которое содержит всю эту информацию. Дайте мне знать, если это поможет. – goddamnyouryan
У меня есть лучшая идея, спасибо, но как выглядит ваш метод «from_omniath»? –