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