【问题标题】:Laravel - Testing Auth0 UserLaravel - 测试 Auth0 用户
【发布时间】:2022-12-03 11:44:30
【问题描述】:

我有一个带有标准用户表的 Laravel 应用程序,我正在实现 Auth0 登录。登录时,将使用给定的电子邮件在数据库中创建用户记录。

我有一个 CustomUserRepository.php 文件:

<?php

namespace App\Repositories;

use App\Models\User;
use Illuminate\Contracts\Auth\Authenticatable;

class CustomUserRepository implements \Auth0\Laravel\Contract\Auth\User\Repository
{
    public function fromSession(array $user): ?\Illuminate\Contracts\Auth\Authenticatable
    {
        return User::firstOrCreate(['email' => $user['email']]);
    }

    public function fromAccessToken(array $user): ?\Illuminate\Contracts\Auth\Authenticatable
    {
        // Simliar to above. Used for stateless application types.
        return null;
    }

    public function getUserByUserInfo(array $userinfo) : Authenticatable
    {
        $user = $this->upsertUser( $userinfo['profile'] );
        return new Auth0User( $user->getAttributes(), $userinfo['accessToken'] );
    }

    protected function upsertUser($profile)
    {
        return User::firstOrCreate(
            [
                'sub' => $profile['sub']
            ],
            [
                'email' => $profile['email'] ?? '',
                'name' => $profile['name'] ?? '',
            ]
        );
    }
}

还有我的 auth.php 文件:

<?php

return [

    'defaults' => [
        'guard'     => 'auth0',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver'   => 'session',
            'provider' => 'users',
        ],
        'auth0' => [
            'driver' => 'auth0',
            'provider' => 'auth0',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model'  => App\Models\User::class,
        ],
        'auth0' => [
            'driver' => 'auth0',
            'repository' => App\Repositories\CustomUserRepository::class
        ],
    ],

该应用程序有效。我使用 Auth0 登录,创建了用户,一切都按预期工作,除了测试。

        $this->be(User::find(1));
        $response = $this->get('/valid-url');
        $response->assertStatus(200);

        $response = $this->get('/another-valid-url');
        $response->assertStatus(200);

在这种情况下,PHPUnit 似乎“忘记”了我对第二个 get() 请求的登录。第一个工作正常,状态 200,一切正常。对于第二个请求(获取或发布),我总是会返回 302 返回登录页面。

我该如何解决这个问题?

【问题讨论】:

    标签: laravel auth0


    【解决方案1】:

    #在您的登录功能上应该有以下内容

        if(auth()->attempt($formFields)){
            $request->session()->regenerate();
    

    【讨论】:

      猜你喜欢
      • 2017-06-12
      • 2020-09-27
      • 2020-05-06
      • 2017-07-10
      • 2018-02-13
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多