PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Friday, March 11, 2022

[FIXED] Argument 1 passed to Illuminate\Auth\SessionGuard::attempt() must be of the type array, object given, called in

 March 11, 2022     laravel, laravel-5     No comments   

Issue

I have the controllers below to allow the user login with laravel auth system but when the user clicks in the button "Login" I get the following error:

Argument 1 passed to Illuminate\Auth\SessionGuard::attempt() must be of the type array, object given, called in C:\laragon\www\AGRIAPP\projet investisseur\AgriApp_Investor\AgriAppInvestor\vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php on line 82

When I refresh the page I log in so I wanted to solve this problem

According to the documentation, the attempt function takes an array and a bool

LoginController.php

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function showLoginForm()
{
    return view('auth.login');
}


protected function credentials(Request $request)
{
    $credentials = array(
        'slug' => $request->slug,
        'password' => $request->password,
        'statut' => 1,
    );

    if(Auth::attempt( $credentials,false ))
    {
        return Redirect::to( '/admin/home' );
    }
}


public function username()
{
    return 'slug';
}

protected function authenticated()
{
    $user = auth()->user();
    $user->online = true;
    $user->save();

    if ($user->rule->pluck( 'name' )->contains( 'abonne' )) {
        return Redirect::to( '/admin-dashboard' );
    }

    return Redirect::to( '/admin/home' );
}

public function logout()
{
    $user = Auth::user();
    $user->online=false;
    $user->save();
    Auth::logout();

    return redirect('/');
}}

AuthController.php

protected function attemptLogin(Request $request)
{
    return $this->guard()->attempt(
        $this->credentials($request), $request->filled('remember')
    );
}

/**
 * Get the needed authorization credentials from the request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
protected function credentials(Request $request)
{
    return $request->only($this->username(), 'password');
}


Solution

You have overridden the credentials() method but you're not returning anything from it.

Change your credentials method to:

protected function credentials(Request $request)
{
    return [
        'slug'     => $request->slug,
        'password' => $request->password,
        'statut'   => 1,
    ];
}

I realise that you were trying to authenticate the user inside the credentials method but you don't need to as, in this case, the method calling it is doing the same.

The reason your redirect didn't work either is because the calling method wasn't returning it, so your user was getting logged in but you were actually passing the redirect response to the attempt method which is what caused your error.

Also, I'm not sure if statut is a typo or not?



Answered By - Rwd
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home
View mobile version

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing