我想在我的 Rails API 中实现 google omniauth,但在 sessions_controller 中仍然有错误“:
ArgumentError (wrong number of arguments (given 2, expected 1)):
我的 user.rb 模型:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:confirmable, :trackable,
:omniauthable, omniauth_providers: [:google_oauth2]
def self.create_user_for_google(data)
where(uid: data["email"]).first_or_initialize.tap do |user|
user.provider="google_oauth2"
user.uid=data["email"]
user.email=data["email"]
user.password=Devise.friendly_token[0,20]
user.password_confirmation=user.password
user.save!
end
end
end
我的会话控制器:
# frozen_string_literal: true
require 'httparty'
require 'json'
class SessionsController < ApplicationController
include HTTParty
def get_signin_token
url = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=#{params["id_token"]}"
response = HTTParty.get(url)
user = User.create_user_for_google(response.parsed_response)
tokens = user.create_new_auth_token
user.save
render json: user
end
end