Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails NoMethodError未定义的方法“provider';零级:零级_Ruby On Rails_Google Authentication - Fatal编程技术网

Ruby on rails Rails NoMethodError未定义的方法“provider';零级:零级

Ruby on rails Rails NoMethodError未定义的方法“provider';零级:零级,ruby-on-rails,google-authentication,Ruby On Rails,Google Authentication,我很快就要让google auth为我的rails应用程序工作了,我已经在初始化器下设置了客户端id和密钥,但我不知道我还缺少什么 我安装了google-auth2 gem并迁移了我的表。当我按“登录”而没有在登录页面上填写任何内容时(它应该告诉我填写电子邮件和密码),我会收到此错误,当我与用户登录时,我也会收到此错误 错误: NoMethodError in SessionsController#create undefined method `provider' for nil:NilCla

我很快就要让google auth为我的rails应用程序工作了,我已经在初始化器下设置了客户端id和密钥,但我不知道我还缺少什么

我安装了google-auth2 gem并迁移了我的表。当我按“登录”而没有在登录页面上填写任何内容时(它应该告诉我填写电子邮件和密码),我会收到此错误,当我与用户登录时,我也会收到此错误

错误:

NoMethodError in SessionsController#create
undefined method `provider' for nil:NilClass
Extracted source (around line #9):
7
8
9
10
11
12


    def self.from_omniauth(auth)
        where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user|
          user.provider = auth.provider
          user.uid = auth.uid
          user.name = auth.info.name
会话控制器:

class SessionsController < ApplicationController
    def new
        @user = User.new
    end
    def create
        unless params[:email].empty?
            @user = User.find_by_email(params[:email])
            if @user && @user.authenticate(params[:password])
                session[:user_id] = @user.id
                redirect_to albums_path
            else
                flash[:alert] = "Email or Password Incorrect.  Please try again."
                redirect_to signin_path
            end
        else
                flash[:alert] = "Please include your Email & Password."
                redirect_to signin_path
        end
            if
                @user = User.from_omniauth(request.env["omniauth.auth"])
                    session[:user_id] = @user.id
                    redirect_to root_path
            end
    end
    def destroy
        session.clear
        redirect_to root_path
    end

end
routes.rb

Rails.application.routes.draw do
  get 'auth/:provider/callback', to: 'sessions#create'
  get 'auth/failure', to: redirect('/')
  get '/signup' => 'users#new', as: 'signup'
  post '/signup' => 'users#create'
  get '/signin' => 'sessions#new'
  post '/signin' => 'sessions#create'
  get '/signout' => 'sessions#destroy'
  post '/logout', to: "sessions#destroy"

  resources :albums do
    resources :reviews, except: [:index]
  end
  resources :users, only: [:show, :destroy]
  resources :reviews, only: [:index]

  root to: "albums#index"
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

添加列迁移:

class AddColumnsToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :provider, :string
    add_column :users, :uid, :string
 end
end


你能发布日志吗?错误在哪里?抱歉,一开始就添加了这一点是整个错误吗?代码有点乱,出现了一个新错误。你能发布日志吗?错误在哪里?抱歉,一开始就添加了这一点是整个错误吗?代码有点乱,出现了一个新错误
Rails.application.config.middleware.use OmniAuth::Builder do
    provider :google_oauth2, "client-id-changed-for-stackoverflow", "secret-key"
  end
Rails.application.routes.draw do
  get 'auth/:provider/callback', to: 'sessions#create'
  get 'auth/failure', to: redirect('/')
  get '/signup' => 'users#new', as: 'signup'
  post '/signup' => 'users#create'
  get '/signin' => 'sessions#new'
  post '/signin' => 'sessions#create'
  get '/signout' => 'sessions#destroy'
  post '/logout', to: "sessions#destroy"

  resources :albums do
    resources :reviews, except: [:index]
  end
  resources :users, only: [:show, :destroy]
  resources :reviews, only: [:index]

  root to: "albums#index"
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

class AddColumnsToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :provider, :string
    add_column :users, :uid, :string
 end
end

Started POST "/signin" for ::1 at 2020-04-18 20:42:13 -0400
Processing by SessionsController#create as HTML
  Parameters: {"authenticity_token"=>"33vGGzcGDDuqWWRzZfAH/mhjdK66w3XJhzGNSn3P4Xd021XRdTU9tw5XQgR", "email"=>"", "password"=>"[FILTERED]", "commit"=>"Sign in"}
Redirected to http://localhost:3000/signin
Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms | Allocations: 1096)

NoMethodError (undefined method `provider' for nil:NilClass):

app/models/user.rb:9:in `from_omniauth'
app/controllers/sessions_controller.rb:20:in `create'