Laravel укрепляет эхо/печать/возврат токена, когда пользователь регистрируется или отправляет пароль по электронной почте

Есть ли способ узнать, как laravel fortify генерирует токен, когда пользователь регистрируется (путем отправки подтверждения по электронной почте с токеном), а также когда пользователь сбрасывает пароль (токен отправляется со ссылкой для сброса пароля). Я хочу распечатать/отобразить их для использования во время модульных тестов.


person Azu    schedule 06.05.2021    source источник


Ответы (1)


Я использую Cypress для тестирования внешнего интерфейса, и мне это тоже нужно. В моем случае я определил определенные маршруты, к которым кипарис может получить доступ, чтобы получить токен. Внутри контроллера я делаю это:

public function show (Request $request) {
        $broker = Password::broker(config('fortify.passwords'));

        $token = $broker->createToken($request->user());

        return response()->json($token);
    }

Это просто возвращает токен.

Я могу запустить тест следующим образом:

it('Should be possible to access the password reset page', () => {
    cy.createUserAndLogin().then(user => {
      cy.resetToken().then(token => {
        cy.logout()

        // Visit the password reset page:
        cy.visit('/reset-password/' + token + '?email=' + user.email)

        // Fill the form:
        cy.get('[name=password]').type('A completely new Password 1')
        cy.get('[name=password_confirmation]').type('A completely new Password 1')
        cy.get('button.primary').click()

        // I should now be able to login:
        cy.visit('/login')
        cy.get('[name=email]').type(user.email)
        cy.get('[name=password]').type('A completely new Password 1')
        cy.get('#loginform').submit()

        cy.location('pathname').should('eq', '/spa')
      })
    })
  })

cy.resetToken().then(token => {}) выполняет фактический вызов сервера с помощью команды поддержки кипариса и возвращает токен.

Конечно, вся хитрость в строке cy.visit('/reset-password/' + token + '?email=' + user.email). Вы можете сделать что-то подобное в своей системе тестирования внешнего интерфейса.

person Maarten Veerman    schedule 06.05.2021