Laravel 5.6:Auth :: login

时间:2018-07-27 11:47:17

标签: php laravel laravel-5

我正在使用Laravel 5.6版本。

我尝试手动编写一个登录控制器,成功后将导致进入仪表板,而失败则返回至登录。

问题是当我尝试登录MainController时始终将重定向重定向回登录名。因此,我通过检查Auth :: check是否在登录后正常工作来检查用户是否在LoginController中正确登录,并发现它失败,这使用户似乎由于某种原因无法正确登录,即使我没有收到任何错误消息。

我搜索了几个小时,并尝试了许多方法来解决此问题,但均未成功。因此,我希望有人能给我一些指导来解决这个问题。

我的设置如下:

web.php

<?php
    Route::get('/', 'MainController')->name('dashboard');
    Route::get('/login', 'LoginController')->name('login');
    Route::post('/login/authenticate', 'LoginController@authenticate')->name('authenticate');

MainController.php

<?php
    namespace App\Http\Controllers;

    use App\User;
    use App\Http\Controllers\Controller;

    class MainController extends Controller
    {
        public function __construct()
        {
            $this->middleware('auth');
        }

        public function __invoke()
        {
            return view('maintenance');
        }
    }

LoginController

<?php
    namespace App\Http\Controllers;

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

    class LoginController extends Controller
    {
        $user = User::where('userid', $request->input('username'))
            ->where('user_pass', $request->input('password'))
            ->where('state', 0)
            ->first();

            if($user) {
                Auth::login($user);
                if (Auth::check()) {
                    dd('Auth::check() failed');
                }

                //return redirect()->route('dashboard');
            } else {
                return redirect()->back()->withInput();
            }
        }
    }

User.php

<?php
    namespace App;

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

    class User extends Authenticatable
    {
        use Notifiable;
        protected $primaryKey = 'account_id';
        protected $table = 'login';
        public $timestamps = false;
    }

3 个答案:

答案 0 :(得分:1)

if (Auth::check()) {
    dd('Auth::check() failed');
}

Auth::check()返回true时,用户已登录。 因此,就像在您的代码中一样。例如:

if (!Auth::check()) {
    dd('Auth::check() failed');
}

答案 1 :(得分:1)

您可以尝试以下代码:

if (Hash::check('plain-text', $hashedPassword)) {
    // The passwords match...
}

答案 2 :(得分:0)

尝试那样使用

public function store() 
{
    $credentials = array('user_displayname'=>Input::get('user_displayname'),
                         'user_password'=> Input::get('user_password'));
    if (Auth::attempt($credentials))
    {
        return Auth::user();
    }

    return 'not logged';
}