Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-Auth::INTERT未返回正确的响应_Php_Laravel - Fatal编程技术网

Php Laravel-Auth::INTERT未返回正确的响应

Php Laravel-Auth::INTERT未返回正确的响应,php,laravel,Php,Laravel,这是我的登录控制器。像这样,它不起作用: <?php namespace App\Http\Controllers; use App\Account; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class LoginController extends Controller { public function authenticate(Request $request) {

这是我的登录控制器。像这样,它不起作用:

<?php

namespace App\Http\Controllers;

use App\Account;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    public function authenticate(Request $request)
    {
        $credentials = array(
            'email'=> $request->email,
            'password'=> hash('sha512', $request->password)
        );

        if (Auth::attempt($credentials)) {
            echo "Login is valid";
        } else {
            echo "IT is not valid login!";
        }

        var_dump($credentials);


    }
}
以下是我的auth.php配置文件:

为什么
Auth::trunt
没有返回正确的响应? 我确信由于
Account::where($credentials)
此检查返回的
登录有效,因此数据已正确给出并哈希


我是拉雷维尔的新手。你能帮我个忙吗?

要将密码与数据库中存储的密码(散列密码)进行比较,不需要对其进行散列。只需使用未哈希的密码版本:

public function authenticate(Request $request)
{
    $credentials = array(
        'email'=> $request->email,
        'password'=> $request->password, // <----
    );

    if (Auth::attempt($credentials)) {
        echo "Login is valid";
    } else {
        echo "IT is not valid login!";
    }

    var_dump($credentials);
}
公共功能验证(请求$Request)
{
$credentials=数组(
“电子邮件”=>$request->email,

'password'=>$request->password,//要将密码与数据库中存储的密码(散列密码)进行比较,您不需要对其进行散列。只需使用未散列的密码版本:

public function authenticate(Request $request)
{
    $credentials = array(
        'email'=> $request->email,
        'password'=> $request->password, // <----
    );

    if (Auth::attempt($credentials)) {
        echo "Login is valid";
    } else {
        echo "IT is not valid login!";
    }

    var_dump($credentials);
}
公共功能验证(请求$Request)
{
$credentials=数组(
“电子邮件”=>$request->email,
“密码”=>$request->password,//根据
您只需要在验证中提供简单密码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
/**
 * Handle an authentication attempt.
 *
 * @param  \Illuminate\Http\Request $request
 *
 * @return Response
 */
public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');



if (Account::where($credentials)) {
        echo "Login is valid";
    } else {
        echo "IT is not valid login!";
    }

    var_dump($credentials);
}
根据
您只需要在验证中提供简单密码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
/**
 * Handle an authentication attempt.
 *
 * @param  \Illuminate\Http\Request $request
 *
 * @return Response
 */
public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');



if (Account::where($credentials)) {
        echo "Login is valid";
    } else {
        echo "IT is not valid login!";
    }

    var_dump($credentials);
}

我想你的代码有点混乱:

1)
Account::where($credentials)
始终为真,因为它返回
illumb\Database\elogent\Builder
的实例,所以每次输入都会得到
“登录有效”

2)
Auth::trunt($credentials)
不尝试使用提供的所有凭据检索
用户
,但它显式地从用于获取
用户
模型的
位置
中删除
密码
键(您可以在
retrieveByCredentials()中看到)
函数位于
illumb\Auth\EloquentUserProvider
)中。在检索到
用户后,它会检查登录输入中提供的密码是否与其存储在数据库中的密码哈希匹配

3) 您不需要对密码进行散列,它不用于根据第2点检索用户(顺便说一句,每次您对密码进行
散列时,散列是不同的,因此您不能像您尝试的那样在
中使用它),因此您必须编写以下内容:

$credentials=array(
“电子邮件”=>$request->email,
“密码”=>$request->password
);
4) Laravel不使用
hash('512',…)
寄存器中的密码进行散列,支持的散列驱动程序有;
bcrypt
argon2id
argon2id
,您可以在
config/hashing.php
中对其进行更改。Laravel使用
hash::make()
在注册控制器中,如果您更改了此好运,您还必须更改提供商检查密码的方式(请参阅
illumb\Auth\EloquentUserProvider
)。但这应该是另一个问题


我希望这能有所帮助。

我想您的代码中有点混乱:

1)
Account::where($credentials)
始终为真,因为它返回
illumb\Database\elogent\Builder
的实例,所以每次输入都会得到
“登录有效”

2)
Auth::trunt($credentials)
不尝试使用提供的所有凭据检索
用户
,但它显式地从用于获取
用户
模型的
位置
中删除
密码
键(您可以在
retrieveByCredentials()中看到)
函数位于
illumb\Auth\EloquentUserProvider
)中。在检索到
用户后,它会检查登录输入中提供的密码是否与其存储在数据库中的密码哈希匹配

3) 您不需要对密码进行散列,它不用于根据第2点检索用户(顺便说一句,每次您对密码进行
散列时,散列是不同的,因此您不能像您尝试的那样在
中使用它),因此您必须编写以下内容:

$credentials=array(
“电子邮件”=>$request->email,
“密码”=>$request->password
);
4) Laravel不使用
hash('512',…)
寄存器中的密码进行散列,支持的散列驱动程序有;
bcrypt
argon2id
argon2id
,您可以在
config/hashing.php
中对其进行更改。Laravel使用
hash::make()
在注册控制器中,如果您更改了此好运,您还必须更改提供商检查密码的方式(请参阅
illumb\Auth\EloquentUserProvider
)。但这应该是另一个问题


我希望这会有所帮助。

我相信你需要将未修改的密码传递给Auth::trunt
Auth::trunt
将散列并匹配密码本身,你不需要对密码进行散列。已尝试但不起作用。我的密码存储在sha512散列中。尝试了你俩建议的方法,但也不起作用。我相信你需要要将未删除的密码传递给Auth::trunt
Auth::trunt
将散列并与密码本身匹配,您不需要对密码进行散列。已尝试但不起作用。我的密码使用sha512散列存储。尝试了双方建议的方法,但也不起作用。尝试通过散列传递密码,但不起作用。尝试传递它时不要散列,但它不会再次工作。