Friday, March 11, 2022

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

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

No comments:

Post a Comment

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