我正在使用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;
}
答案 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';
}