【问题标题】:Auth::attempt always return false even with proper input即使输入正确,Auth::attempt 也总是返回 false
【发布时间】:2020-06-02 04:58:42
【问题描述】:

这是我使用的外墙

namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

我已经使用 bcrypt 成功创建了带有哈希密码的用户注册页面。

    //Get singnup view
    public function getSignup() 
    {
        return view('user.signup');
    }
    //Process signup
    public function postSignup(Request $request)
    {
        $this->validate($request, [
            'email' => 'email|required|unique:users',
            'password' => 'required|min:4'
        ]);
        $user = new User([
            'email' => $request->input('email'),
            'password' => bcrypt($request->input('password')),
        ]);
        $user->save();
        return redirect()->route('product.index');
    }

现在我卡在登录页面。 Auth::attempt 总是返回 false。我什至尝试在我的数据库中存储一个普通密码并在没有 bcrypt 的情况下登录,但它仍然返回 false。我不知道我现在哪里错了。

//Get signin view
    public function getSignin() 
    {
        return view('user.signin');
    }
    //Process signin
    public function postSignin(Request $request) 
    {
        $this->validate($request, [
                'email' => 'email|required',
                'password' => 'required|min:4'
                ]);
        $credentials = array(
            'email' => $request->input('email'), 
            'password' => bcrypt($request->input('password'))
                );
        if(Auth::attempt($credentials))
        {
            return redirect()->route('user.profile');
        }
        return redirect()->route('product.index');
    }

【问题讨论】:

  • 您到底想做什么?你是复制 laravel 自带的默认授权还是创建自定义注册/注册?

标签: php laravel


【解决方案1】:

Auth::attempt() 中不需要 bcrypt()。删除它,然后重试。

【讨论】:

  • 天哪,它有效:0。回顾文档,似乎我误读了它。从字面上看,我应该对密码进行哈希处理,因为 Auth::attempt 会自动执行此操作。无论如何,谢谢。
【解决方案2】:

config\auth 中,更改保护驱动程序设置为api

'defaults' => [
    'guards' => 'api',
    'passwords' => 'users'
]

但是 Laravel 不支持 attempt() 函数与保护 api。因此,你应该使用一些像Passport这样的包(你可以参考here

或者更简单,只需使用Auth::guard('api')->attempt($credentials) 配置您的保护驱动程序

希望这能解决您的问题。

【讨论】:

  • 谢谢。但似乎我不需要将其更改为 api。我只是误读了文档。它说我不应该散列Auth::attempt 的输入密码。不过谢谢。我会注意的。
猜你喜欢
  • 2021-09-26
  • 2014-03-15
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 2016-09-12
  • 2017-05-24
  • 2013-06-11
相关资源
最近更新 更多