0.55.8 • Published 8 months ago

@startupjs/auth v0.55.8

Weekly downloads
1
License
MIT
Repository
-
Last release
8 months ago

import { useState } from 'react' import { AuthForm, LogoutButton, onLogout } from './' import { AuthButton as GoogleAuthButton } from '@startupjs/auth-google' import { AuthButton as LinkedinAuthButton } from '@startupjs/auth-linkedin/client' import { LoginForm, RegisterForm, RecoverForm } from '@startupjs/auth-local' import { Button } from '@startupjs/ui'

Авторизация

Требования

@react-native-async-storage/async-storage: >= 1.13.2
react-native-restart: >= 0.0.22
@startupjs/ui: >= 0.33.0-alpha.0
startupjs: >= 0.33.0-alpha.0

Описание

Инициализация на сервере

import { initAuth } from '@startupjs/auth/server'

В теле функции startupjsServer происходит инициальзация модуля, в strategies - добавляются стратегии каждая со своим набором характеристик:

initAuth(ee, {
  strategies: [
    new LocalStrategy({}),
    new FacebookStrategy({
      clientId: conf.get('FACEBOOK_CLIENT_ID'),
      clientSecret: conf.get('FACEBOOK_CLIENT_SECRET')
    })
  ]
})

Micro frontend

Тестовый пример

Представляет собой готовые страницы с формами, которые можно подключить на сайт

Чтобы их использовать, нужно в файле Root/index.js (либо где используется startupjs/app), заинитить микро фронтент и положить его в App компонент

Для начала нужна функция инициализатор, которая принимает нужные опции:

import { initAuthApp } from '@startupjs/auth'

Основные ее опции - это socialButtons и localForms, которые собирают нужные компоненты для общей формы. Т.к. заранее неизвестно какие стратегии должны быть подключены, приходиться подключать их самим. Кнопки есть практически у каждой стратегии, кроме локальной, чтобы ознакомиться какие компоненты существуют для auth-local, есть отдельное описание для этой стратегии (сообственно как и для всех других).

Импорт нужных компонентов:

import { AuthButton as AzureadAuthButton } from '@startupjs/auth-azuread'
import { AuthButton as LinkedinAuthButton } from '@startupjs/auth-linkedin'
import { LoginForm, RegisterForm, RecoverForm } from '@startupjs/auth-local'

Все базируется на локальной стратегии. Она имеет 3 стандартных формы: Авторизация, Регистрация, Восстановление пароля. Между этими формами происходит переключение под капотом. Микрофронтенд имеет 3 обязательных роута для локальной стратегии: 'sign-in', 'sign-up' и 'recover', собственно при использовании локальной формы, всегда нужно чтобы по этим ключам были установлены компоненты с формами.

const auth = initAuthApp({
  localForms: {
    'sign-in': <LoginForm />,
    'sign-up': <RegisterForm />,
    'recover': <RecoverForm />
  },
  socialButtons: [
    <AzureadAuthButton />,
    <LinkedinAuthButton />
  ]
})

Когда микрофронтенд сгенерирован, нужно просто передать его в App

App(apps={ auth, main })

И так же добавить роуты для сервере

import { getAuthRoutes } from '@startupjs/auth/isomorphic'
//...
appRoutes: [
  ...getAuthRoutes()
]
//...

Кастомизация микрофронтенда

Можно изменить Layout. К примеру у сайта есть своя шапка, лого, фон и т.д. Для этого можно прокинуть кастомный Layout в опции микрофронтенда:

const auth = initAuthApp({
  Layout,
  localForms: {
    'sign-in': <LoginForm />,
    'sign-up': <RegisterForm />,
    'recover': <RecoverForm />
  }
})

Поскольку в localForms и socialButtons прокидывается jsx, все компоненты можно модифицировать как обычно:

const auth = initAuthApp({
  Layout,
  localForms: {
    'sign-in': <LoginForm
      properties={{
        age: {
          input: 'number',
          label: 'Age',
          placeholder: 'Enter your age'
        }
      }}
      validateSchema={{
        age: Joi.string().required().messages({
          'any.required': 'Fill in the field',
          'string.empty': 'Fill in the field'
        })
      }}
    />,
    'sign-up': <RegisterForm />,
    'recover': <RecoverForm />
  },
  socialButtons: [
    <GoogleAuthButton
      label='Sign in with Google'
    />,
    <FacebookAuthButton
      label='Sign in with Facebook'
    />
  ]
})

Подробно о кастомизации этих компонентов описано на страницах с нужными стратегиями

Если нужно изменить стандартные заголовки и сделать свою разметку, можно применить функцию renderForm:

const auth = initAuthApp({
  Layout,
  localForms: {
    'sign-in': <LoginForm />,
    'sign-up': <RegisterForm />,
    'recover': <RecoverForm />
  },
  socialButtons: [
    <GoogleAuthButton />,
    <FacebookAuthButton />
  ],
  renderForm: function ({
    slide,
    socialButtons,
    localActiveForm,
    onChangeSlide
  }) {
    return pug`
      Div
        H5= getCaptionForm(slide)
        = socialButtons
        Div(style={ marginTop: 16 })
          = localActiveForm
    `
  }
})

Она получает те формы которые объявлены, и текущий слайд

Общий компонент

Общая форма с нужными видами авторизации Все тоже самое что и для микрофронтенда, только нет роутов, и переключение слайдов нужно настроить самим

import { AuthForm } from '@startupjs/auth'
const [slide, setSlide] = useState('sign-in')

return (
  <AuthForm
    slide={slide}
    localForms={{
      'sign-in': <LoginForm />,
      'sign-up': <RegisterForm />,
      'recover': <RecoverForm />
    }}
    socialButtons={[
      <GoogleAuthButton label='Sign in with Google' />,
      <LinkedinAuthButton />
    ]}
    onChangeSlide={slide=> setSlide(slide)}
  />
)

Кнопка и хэлпер "Выйти"

Пример использования

import { LogoutButton } from '@startupjs/auth'
return <LogoutButton />

или

import { onLogout } from '@startupjs/auth'
return <Button onPress={onLogout}>Выйти</Button>

Редирект после авторизации

Задать путь редиректа при инициализации на сервере

initAuth(ee, {
  successRedirectUrl: '/profile',
})
0.59.0-canary.0

8 months ago

0.57.0-canary.75

10 months ago

0.57.0-canary.0

1 year ago

0.56.0-alpha.0

1 year ago

0.55.7

2 years ago

0.55.8

2 years ago

0.55.2

2 years ago

0.55.1

2 years ago

0.55.0-alpha.1

2 years ago

0.55.0-alpha.0

2 years ago

0.55.0

2 years ago

0.53.3

2 years ago

0.53.0

2 years ago

0.55.0-alpha.11

2 years ago

0.55.0-alpha.12

2 years ago

0.54.1

2 years ago

0.54.2

2 years ago

0.54.0

2 years ago

0.52.3

2 years ago

0.51.0

2 years ago

0.52.1

2 years ago

0.52.0

2 years ago

0.50.13

2 years ago

0.50.16

2 years ago

0.50.12

2 years ago

0.50.5

3 years ago

0.49.1

3 years ago

0.49.3

3 years ago

0.49.4

3 years ago

0.48.0

3 years ago

0.49.0

3 years ago

0.47.0

3 years ago

0.47.5

3 years ago

0.46.0

3 years ago

0.45.0

3 years ago

0.44.20

3 years ago

0.44.21

3 years ago

0.44.8

3 years ago

0.44.2

3 years ago

0.44.0

3 years ago

0.43.0

3 years ago

0.41.2

3 years ago

0.41.0

3 years ago

0.42.0

3 years ago

0.43.1

3 years ago

0.39.11

4 years ago

0.40.0

4 years ago

0.39.10

4 years ago

0.39.0

4 years ago

0.38.0

4 years ago

0.37.3

4 years ago

0.37.0

4 years ago

0.36.4

4 years ago

0.36.3

4 years ago

0.36.0

4 years ago

0.35.10

4 years ago

0.35.9

4 years ago

0.35.2

4 years ago

0.35.0

4 years ago

0.34.2

4 years ago

0.34.0

4 years ago

0.33.8

4 years ago

0.33.5

4 years ago

0.33.2

4 years ago

0.33.1

4 years ago

0.33.0

4 years ago

0.33.0-alpha.4

4 years ago

0.33.0-alpha.0

4 years ago

0.32.5

4 years ago

0.32.1

4 years ago

0.32.0

4 years ago

0.31.26

4 years ago

0.31.22

4 years ago

0.31.21

4 years ago

0.31.20

4 years ago

0.31.15

4 years ago

0.31.14

4 years ago

0.31.11

4 years ago

0.31.10

4 years ago

0.31.9

4 years ago

0.31.8

4 years ago

0.31.6

4 years ago

0.31.5

4 years ago

0.31.4

5 years ago

0.31.2

5 years ago

0.31.0

5 years ago

0.30.10

5 years ago

0.30.9

5 years ago

0.30.8

5 years ago

0.30.7

5 years ago

0.30.6

5 years ago

0.30.5

5 years ago

0.30.4

5 years ago

0.30.2

5 years ago

0.30.3

5 years ago

0.30.1

5 years ago

0.29.16

5 years ago

0.30.0

5 years ago

0.29.8

5 years ago

0.29.7

5 years ago

0.29.6

5 years ago

0.29.3

5 years ago

0.29.2

5 years ago

0.29.0

5 years ago