Используя devise_token_auth и omniauth-twitter, я не могу войти через Twitter - PullRequest
0 голосов
/ 27 октября 2018

Отправляя запрос GET на /auth/twitter, я успешно аутентифицируюсь в Twitter и перенаправляю на /auth/twitter/callback. Но, отправляя запрос GET на /api/current_user, сервер API всегда возвращает null. И, user_signed_in? всегда возвращаю false Я не могу знать, как войти в систему с Twitter. Я хочу получить current_user Как войти в систему через Twitter? * Версия : Rails (режим API) 5.1.6 ruby 2.4.0 routes.rb

Rails.application.routes.draw do
  mount_devise_token_auth_for 'User', at: 'auth', controllers: {
    omniauth_callbacks: "overrides/omniauth_callbacks",
  }
  namespace :api, format: 'json' do
    root 'posts#index'
    get 'current_user', to: 'users#current'
  end
end

omniauth_callbacks.rb

module Overrides
  class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
  def assign_provider_attrs(user, auth_hash)
    all_attrs = auth_hash["info"].slice(*user.attributes.keys)
    orig_val = ActionController::Parameters.permit_all_parameters
    ActionController::Parameters.permit_all_parameters = true
    permitted_attrs = ActionController::Parameters.new(all_attrs)
    permitted_attrs.permit({})
    user.assign_attributes(permitted_attrs)
    ActionController::Parameters.permit_all_parameters = orig_val
    user
  end
  end
end

users_controller.rb

class Api::UsersController < ActionController::API
  def current
    render json: current_user
  end
end

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете попробовать следующее решение и изменить его по своему усмотрению

В вашем omniauth_callbacks_controller.rb должен быть следующий код:

def callback
    @user = User.from_omniauth(request.env['omniauth.auth'])

    if @user.persisted?
      #your code here to set current_user if necessary
    else
      #your code here
    end
end

def twitter
    callback
end

В вашем user.rb должен быть следующий код:

def self.from_omniauth(auth)
    where(email: auth.info['email'], /add the attributes you want to check/).first_or_create do |user|
      user.password = Devise.friendly_token[0,20]
      #user.name = auth.info.name   # assuming the user model has a name
      #user.image = auth.info.image # assuming the user model has an image
    end
end

Источник: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...