2016-12-15 4 views
2

У меня была интеграция 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 

В основном это создает нового пользователя и подписывает их в случае, если они не связаны, и он обновляет свою информацию для входа, если они есть.

+0

Не могли бы вы добавить более подробную информацию, такую ​​как файл маршрутов и ваш контроллер, который получает обратный вызов? Какую версию Omniauth и Instagram Omniauth вы используете? –

+0

@AlexanderLuna Я добавил редактирование сообщения, которое содержит всю эту информацию. Дайте мне знать, если это поможет. – goddamnyouryan

+0

У меня есть лучшая идея, спасибо, но как выглядит ваш метод «from_omniath»? –

ответ

3

Кажется, что проблема в Instagram возникла при получении токенов доступа. https://news.ycombinator.com/item?id=13178789

+0

Я предполагаю, что решение просто ждать instagram, чтобы исправить его, надеюсь, и тем временем иметь клиентов попробуйте войти в/из instagram в Интернете. – goddamnyouryan

+0

Он даже не работает в 100% случаев. Некоторые люди предполагают использование неявной аутентификации в качестве временного исправления. Проверьте комментарии на ссылке ycombinator –

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