快速实现免密登录
线上的项目,有时候想要通过免密登录来对某个用户进行调试,怎么办?借助 Laravel 的签名路由即可快速实现。
首先,需要生成一个免密登录的链接
App\User.php
<?php
use Illuminate\Support\Facades\URL;
class User
{
public function passwordFreeUrl()
{
return URL::temporarySignedRoute(
'passwordFree', now()->addMinutes(30), [$this]
);
}
}
对应路由
routes/web.php
<?php
use Illuminate\Http\Request;
use App\User;
Route::get('passwordFree/{user}', function(Request $request, User $user){
Auth::login($user);
echo "免密登录成功";
})->name('passwordFree');
测试
<?php
namespace Tests\Unit;
use App\User;
use Tests\TestCase;
class PasswordFreeLoginTest extends TestCase
{
/**
* @test
*/
public function user_can_login_without_password()
{
$user = factory(User::class)->create();
$loginUrl = $user->passwordFreeUrl();
$response = $this->get($loginUrl);
$response->assertStatus(200);
$this->assertAuthenticatedAs($user);
}
}
运行测试
$ vendor/bin/phpunit tests/Unit/PasswordFreeLoginTest.php
结果