Auth 自动验证 ettempt 返回始终 false

Controller代码

    public function login(Request $request)
    {
        if($request->isMethod('POST')){
            $this->validate($request,[
                'email'     =>  'required|email',
                'password'  =>  'required|between:8,32',
                'captcha'   =>  'required|captcha'
            ],[
                'required'  =>  ':attribute不能为空',
                'email'     =>  ':attribute不正确',
                'captcha'   =>  ':attribute验证失败',
                'between'   =>  ':attribute必须在8到32位'
            ],[
                'email'     =>  '邮箱',
                'password'  =>  '密码',
                'captcha'   =>  '验证码'
            ]);
            $date = $request->only(['email','password']);
            $requests =  Auth::guard('web')->attempt($date,$request->get('online'));
            dd($requests);
        }else{
            return view('home.login');
        }
    }

Model代码

<?php
namespace App\Models;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class ios extends Model implements Authenticatable
{
    protected $table = 'ios';
    protected $fillable = ['username','password','email'];

    /**
     * Get the name of the unique identifier for the user.
     *
     * @return string
     */
    public function getAuthIdentifierName()
    {
        // TODO: Implement getAuthIdentifierName() method.
    }

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        // TODO: Implement getAuthIdentifier() method.
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        // TODO: Implement getAuthPassword() method.
    }

    /**
     * Get the token value for the "remember me" session.
     *
     * @return string
     */
    public function getRememberToken()
    {
        // TODO: Implement getRememberToken() method.
    }

    /**
     * Set the token value for the "remember me" session.
     *
     * @param string $value
     * @return void
     */
    public function setRememberToken($value)
    {
        // TODO: Implement setRememberToken() method.
    }

    /**
     * Get the column name for the "remember me" token.
     *
     * @return string
     */
    public function getRememberTokenName()
    {
        // TODO: Implement getRememberTokenName() method.
    }
}

Auth配置


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

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\ios::class,
        ],
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
Dennis_Ritchie
最佳答案

Auth::guard('web')返回的是SessionGuard对象,它的attempt方法如下所示,如果这个方法返回false的话,就说明红色标出来的部分失败了
file
hasValidCredentials方法所示:

file

上面的user是你的ios对象,那么provider是啥呢?根据你上面的配置:

file
这里的provider就是EloquentUserProvider类的对象,我们再来看它的validateCredentials方法,如下:

file
我们看到你的模型实现了getAuthPassword方法,但是为空,那么hasher是啥呢?通过代码,我们知道它实现了Hasher接口,如下:

file

通过查看它的check方法,知道如果检查为true的话,那么返回为true,否则返回为false,所以说了这么多,你的getAuthPassword方法没有返回值,怎么可能验证通过呢?最起码,应该返回数据库里面的对应密码字段值吧,比如password。

5年前 评论
讨论数量: 1
Dennis_Ritchie

Auth::guard('web')返回的是SessionGuard对象,它的attempt方法如下所示,如果这个方法返回false的话,就说明红色标出来的部分失败了
file
hasValidCredentials方法所示:

file

上面的user是你的ios对象,那么provider是啥呢?根据你上面的配置:

file
这里的provider就是EloquentUserProvider类的对象,我们再来看它的validateCredentials方法,如下:

file
我们看到你的模型实现了getAuthPassword方法,但是为空,那么hasher是啥呢?通过代码,我们知道它实现了Hasher接口,如下:

file

通过查看它的check方法,知道如果检查为true的话,那么返回为true,否则返回为false,所以说了这么多,你的getAuthPassword方法没有返回值,怎么可能验证通过呢?最起码,应该返回数据库里面的对应密码字段值吧,比如password。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!