【问题标题】:Laravel SQLSTATE[42S22]: Column not foundLaravel SQLSTATE [42S22]:找不到列
【发布时间】:2020-10-02 01:23:45
【问题描述】:

我正在尝试在 Laravel 7 中使用自定义保护创建多重身份验证,当我尝试登录时收到此错误“SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL : select * from admins where email = mukamba@gmail.com and 0 is null limit 1)"

我的 auth.php 在配置中

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'admin-api' => [
        'driver' => 'token',
        'provider' => 'admins',
    ],
],


 'providers' => [

    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
        
    ],
],

我的管理员登录控制器

 <?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use auth;
class AdminLoginController extends 

Controlle

r
{
    public function __construct()
    {
          $this->middleware('guest:admin');
    }
    public function showLoginForm()
    {
        return view('auth.admin-login');

    }
    public function login(Request $request)
    {
        // validate the data 
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:6'
        ]);

    // attempt user to login
    if(auth::guard('admin')->attempt(['email' => $request->email, 'password'=> $request->password, $request->remember])){
        //if susscefull  redirect to the intended location
        return redirect()->intended(route('admin.dashboard'));
    }
    // if unsuccesfull return to the page they were

}

}

我的管理员模型

    <?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use Notifiable;
    protected $guard = 'admin';
/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password', 'job_title',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];

}

登录控制器

 <?php



  namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use App\Providers\RouteServiceProvider;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    
    class LoginController extends Controller
    {
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}


 

【问题讨论】:

  • 你的后卫长什么样?
  • 记住我标志不是传递给attempt的凭据的一部分;这是它自己的论点
  • @Repox 我的管理员守卫包含在问题的 auth.php 配置中
  • @lagbox 当我尝试删除尝试功能中的“记住”时,它会将我重新引导回登录页面而没有任何错误。
  • @lagbox 我得到你的答案我删除了尝试凭据中的记住标志并且它起作用了。谢谢

标签: php laravel


【解决方案1】:

问题出在您传递密码时的某个地方。 select * from admins where email = mukamba@gmail.com and 0 is null limit 1) 我猜您在尝试登录时遇到此错误。检查登录控制器并查看您传递的参数。或者将控制器放在这里,以便我们提供更多信息。

【讨论】:

    【解决方案2】:

    尝试函数应该是这样的

      if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember'))) {            return redirect()->intended(route('admin.dashboard'));
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2018-10-20
      • 1970-01-01
      • 2020-07-26
      • 2018-02-21
      • 2015-12-08
      • 2018-11-02
      • 2019-10-02
      相关资源
      最近更新 更多