【问题标题】:Laravel 5 Auth::attempt always return false, even if i typed correct data ? (LARAVEL)Laravel 5 Auth::attempt 总是返回 false,即使我输入了正确的数据? (拉拉维尔)
【发布时间】:2019-04-19 23:05:41
【问题描述】:

我在 LARAVEL 应用程序上创建了自定义登录系统,直到昨天一切正常。当我输入与数据库相同的用户的登录表单电子邮件和密码时,系统将我重定向回来。我不知道是什么问题,我清除了缓存和所有内容,但仍然无法正常工作。如果有人知道答案,我将不胜感激。

登录页面图片:

https://imgur.com/a/xuEWQZg

用户数据存储在带种子的数据库中:

https://imgur.com/0mJOviV

`

从登录表单发送数据的dd函数:

`https://imgur.com/a/D2k8Ztn

主控制器

  function checklogin(Request $request)
    {
     $this->validate($request, [
      'email'   => 'required|email',
      'password'  => 'required|alphaNum|min:3'
     ]);

     $user_data = array(
      'email'  => $request->get('email'),
      'password' => $request->get('password')
     );
     if(Auth::attempt($user_data))
     {

      return redirect('');
     }
     else
     {
      return back()->with('error', 'you typed wrong data');
     }

    }

登录页面

@extends('layout')

@section('content')
<div class="container2">  
<div class="container">
        <div class="card card-container">

            <h1 style="text-align: center;">Admin login</h1>


   @if(isset(Auth::user()->email))
    <script>window.location="/main/successlogin";</script>
   @endif

   @if ($message = Session::get('error'))
   <div class="alert alert-danger alert-block">
    <button type="button" class="close" data-dismiss="alert">×</button>
    <strong>{{ $message }}</strong>
   </div>
   @endif

   @if (count($errors) > 0)
    <div class="alert alert-danger">
     <ul>
     @foreach($errors->all() as $error)
      <li>{{ $error }}</li>
     @endforeach
     </ul>
    </div>
   @endif

   <form method="post" action="{{ url('/main/checklogin') }}">
    {{ csrf_field() }}
    <div class="form-group">
     <label>Unesi email</label>
     <input type="email" name="email" class="form-control" />
    </div>
    <div class="form-group">
     <label>Unesi šifru</label>
     <input type="password" name="password" class="form-control" />
    </div>
    <div class="form-group">
     <input type="submit" name="login" class="btn btn-primary" value="Login" />
    </div>
   </form>
             </div><!-- /card-container -->
    </div><!-- /container -->
 </div><!-- /container -->
@endsection

路线

Route::get('/', 'MainController@successlogin')->name('main');
Route::get('/admin', 'MainController@index');
Route::post('/main/checklogin', 'MainController@checklogin');
Route::get('main/logout', 'MainController@logout');

用户模型

<?php

namespace App;

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

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'lastname', 'level', 
    ];

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

【问题讨论】:

  • 你能展示你的数据库吗
  • 那些密码不一样吧?大多数哈希值是并且应该是区分大小写的。
  • 数据库中的密码和我输入的登录表单中的密码相同
  • 因为密码字段区分大小写,您在密码字段的开头有 D,所以您必须发送 D 而不是小 d

标签: php laravel login


【解决方案1】:

试试这个:

function checklogin(Request $request)
    {
     $this->validate($request, [
      'email'   => 'required|email',
      'password'  => 'required|alphaNum|min:3'
     ]);

     $user_data = array(
      'email'  => $request->get('email'),
      'password' => bcrypt($request->get('password'))
     );
     if(Auth::attempt($user_data))
     {

      return redirect('');
     }
     else
     {
      return back()->with('error', 'you typed wrong data');
     }

    }

【讨论】:

  • 用户正在尝试进行身份验证。此处无需bcrypt
猜你喜欢
  • 1970-01-01
  • 2016-09-12
  • 2015-12-10
  • 2021-09-26
  • 1970-01-01
  • 2017-05-24
  • 2013-06-11
  • 2014-03-15
相关资源
最近更新 更多