Q:

Sign in with Google Oauth2.0: Authorization failed. Server message: { "error" : "redirect_uri_mismatch" }

I am getting Signet::AuthorizationError in LoginController#callback and Authorization failed. Server message: { "error" : "redirect_uri_mismatch" } on the line auth_client.fetch_access_token! when I click "Allow" on the OAuth screen and execute my callback method during the OAuth process.
I have checked out this: Google OAuth 2 authorization - Error: redirect_uri_mismatch, but I still can't figure it out.
I am trying to get a login with Google set up like this:

User goes to /login and clicks on the "sign in with google" button.
The Google login prompt comes up, user signs in with Gmail, and then gets redirected to /home.

I have the following uris in my web application credentials in Google consoles:

http://localhost:3000
http://localhost:3000/login/callback
http://localhost/login/callback
http://localhost

routes.rb
get '/home' => 'home#index'
get '/login' => 'login#prompt'
get '/login/callback' => 'login#callback'

login_controller.rb
require 'google/api_client/client_secrets'

class LoginController < ApplicationController
  GOOGLE_CLIENT_SECRET_FILE = Rails.root.join('config/google_oauth2_secret.json')

  def prompt
    if session[:credentials]
      redirect_to '/home'
    else
      auth_client = get_auth_client
      auth_client.update!(
        :scope => ['profile', 'email'],
        :redirect_uri => 'http://localhost:3000/login/callback'
      )
      @auth_uri = auth_client.authorization_uri.to_s
      render layout: false
    end
  end

  def callback
    auth_client = get_auth_client
    auth_client.code = request['code']
    auth_client.fetch_access_token!
    auth_client.client_secret = nil
    session[:credentials] = auth_client.to_json
    redirect_to '/home'
  end

  private

  def get_auth_client
      Google::APIClient::ClientSecrets.load(GOOGLE_CLIENT_SECRET_FILE).to_authorization
  end
end

I also have a concern. In my prompt method, how do I verify that session[:credentials] is the correct session code? Couldn't anyone just put some bogus string into the credentials session and gain access?
I have been following this guide: https://developers.google.com/api-client-library/ruby/auth/web-app

A:

I realize the issue is I am setting the scope in the prompt function when I am generating the auth uri but in my callback function, I am not setting the scope.
It should be like this:
  def callback
    auth_client = get_auth_client
    auth_client.update!(
      :scope => ['profile', 'email'],
      :redirect_uri => 'http://localhost:3000/login/callback'
    )
    auth_client.code = request['code']
    auth_client.fetch_access_token!
    auth_client.client_secret = nil
    session[:credentials] = auth_client.to_json
    redirect_to '/home'
  end

