Laravel 5.7自定义登录不起作用-全新安装

时间:2019-01-30 15:09:27

标签: php laravel laravel-5.7

我重新安装了laravel 5.7 我已经用虚拟信息手动创建了数据库和用户表,并将数据库与应用程序连接。

任何人都可以指出为什么以下代码无法正常工作。

login.blade.php     

        <div class="form box">
           <h1 align="center">Login - MobileInfo</h1>
           <br />

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

           @if ($message = Session::get('error'))
           <div class="alert alert-danger alert-block">
               <button type="button" class="close" data-dismiss="alert">x</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('login/checklogin') }}">
                {{ csrf_field()}}
                <div class="form-group">
                    <label>Username</label>
                    <input type="text" name="username" class="form-control" />
                </div>
                <div class="form-group">
                    <label>Password</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>
    </div>

登录控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Validator;
use Auth;

class LoginController extends Controller
{
public function index()
{
    return view ('login');
}

function checklogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required'
    ]);

    $user_data = array(
        'username' => $request->get('username'),
        'password' => $request->get('password')
    );

    if(Auth::attempt($user_data))
    {
        return redirect('login/success');
    }
    else
    {
        return back()->with('error', 'Wrong Login Details');
    }
}

function success()
{
    return view('dashboard');
}

function logout()
{
    Auth::logout();
    return redirect('login');
}
}

web.php

Route::get('/', 'LoginController@index');
Route::post('login/checklogin', 'LoginController@checklogin');
Route::get('login/success', 'LoginController@success');
Route::get('login/logout', 'LoginController@logout');

添加用户名/密码的任何正确组合后,看到的错误是Auth :: attempt($ user_data)的else块,即“错误的登录详细信息”。

2 个答案:

答案 0 :(得分:0)

默认情况下,Laravel auth通过电子邮件提供身份验证,因此要使用其他字段登录,可以在LoginController中定义它。

public function username()
{
    return 'username';
}

Documentation

答案 1 :(得分:0)

Laravel使用其哈希算法存储密码,然后使用相同的哈希算法进行验证/比较。

问题是,您将文字密码存储在数据库中,这就是为什么laravel无法验证那些密码。 Laravel希望从数据库获得哈希密码。

文字密码无效。所以...

#1

最好的解决方案是,也制作一个注册表单(使用laravel Auth)并通过该注册表单插入演示数据。 Laravel将对密码进行哈希处理后存储密码,并最终成功验证这些密码。

#2

另一种(复杂/乏味的)解决方案是,使用单独的php脚本找出laravel的哈希算法和哈希密码。然后将哈希密码直接存储在数据库中。在这种情况下,您不需要注册表单,因为您是手动进行的。

更新解决方案2

使用以下代码在laravel 5.x中哈希您的文字密码。

$hashedpassword = bcrypt('plaintextpassword');
相关问题