Search code examples
ruby-on-railsrubyauthenticationruby-on-rails-5omniauth

Rails omniauth and regular login, giving an undefined method error


I have used Rails Tutorial's instructions to create a working login. And then later to add Google authorization I used the omniauth method.

However, whenever I sign in using the Google account, I get an error in the sessions_controller. Where it says:

NoMethodError (undefined method `[]' for nil:N
ilClass): app/controllers/sessions_controller.rb:6:in `create'

I am adding the sessions_controller

Sessions_controller.rb

    class SessionsController < ApplicationController
  def new
  end

  def create
    @user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      redirect_back_or user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def create_from_omniauth
    @user = User.from_provider_data(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to user
  end

  def destroy
    log_out if logged_in?
    redirect_to root_url
  end

  def google_destory
    session[:user_id] = nil
    redirect_to root_url
  end

end

How do I resolve this, any help would be highly appreciated.

Thank you!


Solution

  • I think because it's ENV, not env.

    @user = User.from_provider_data(env["omniauth.auth"])
    

    to

    @user = User.from_provider_data(ENV["omniauth.auth"])
    

    unless env is something defined by you