【问题标题】:Argument 1 passed to Illuminate\Auth\SessionGuard::attempt() must be of the type array, object given, called in传递给 Illuminate\Auth\SessionGuard::attempt() 的参数 1 必须是数组类型、给定对象、调用
【发布时间】:2019-07-11 05:41:59
【问题描述】:

我有下面的控制器允许用户使用 laravel auth 系统登录,但是当用户单击“登录”按钮时,我收到以下错误:

传递给 Illuminate\Auth\SessionGuard::attempt() 的参数 1 必须是数组类型,给定对象,在 C:\laragon\www\AGRIAPP\projetinvestisseur\AgriApp_Investor\AgriAppInvestor\vendor\laravel\framework 中调用\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php 在第 82 行

当我刷新页面时我登录所以我想解决这个问题

根据文档,尝试函数接受一个数组和一个布尔值

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');
}

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您已覆盖 credentials() 方法,但您没有从中返回任何内容。

    将您的凭据方法更改为:

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

    我意识到您正在尝试在凭据方法中验证用户身份,但您不需要这样做,因为在这种情况下,调用它的方法正在执行相同的操作。

    您的重定向也不起作用的原因是调用方法没有返回它,因此您的用户正在登录,但您实际上将重定向响应传递给 attempt 方法,这就是导致您的错误的原因.

    另外,我不确定statut 是否是错字?

    【讨论】:

      【解决方案2】:

      如果你使用的是 laravel 8+,你所要做的就是修改你的 credential 函数

      protected function credentials(Request $request)
      {
      
          if(Auth::attempt($request->all())) {
              return Redirect::to( '/admin/home' );
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-22
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        • 2020-02-04
        • 2020-05-27
        相关资源
        最近更新 更多