0.55.8 • Published 4 months ago

@startupjs/auth v0.55.8

Weekly downloads
1
License
MIT
Repository
-
Last release
4 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.56.0-alpha.0

4 months ago

0.55.7

5 months ago

0.55.8

5 months ago

0.55.2

5 months ago

0.55.1

6 months ago

0.55.0-alpha.1

7 months ago

0.55.0-alpha.0

7 months ago

0.55.0

6 months ago

0.53.3

7 months ago

0.53.0

9 months ago

0.55.0-alpha.11

6 months ago

0.55.0-alpha.12

6 months ago

0.54.1

7 months ago

0.54.2

7 months ago

0.54.0

7 months ago

0.52.3

11 months ago

0.51.0

12 months ago

0.52.1

12 months ago

0.52.0

12 months ago

0.50.13

1 year ago

0.50.16

1 year ago

0.50.12

1 year ago

0.50.5

1 year ago

0.49.1

1 year ago

0.49.3

1 year ago

0.49.4

1 year ago

0.48.0

2 years ago

0.49.0

1 year ago

0.47.0

2 years ago

0.47.5

2 years ago

0.46.0

2 years ago

0.45.0

2 years ago

0.44.20

2 years ago

0.44.21

2 years ago

0.44.8

2 years ago

0.44.2

2 years ago

0.44.0

2 years ago

0.43.0

2 years ago

0.41.2

2 years ago

0.41.0

2 years ago

0.42.0

2 years ago

0.43.1

2 years ago

0.39.11

3 years ago

0.40.0

3 years ago

0.39.10

3 years ago

0.39.0

3 years ago

0.38.0

3 years ago

0.37.3

3 years ago

0.37.0

3 years ago

0.36.4

3 years ago

0.36.3

3 years ago

0.36.0

3 years ago

0.35.10

3 years ago

0.35.9

3 years ago

0.35.2

3 years ago

0.35.0

3 years ago

0.34.2

3 years ago

0.34.0

3 years ago

0.33.8

3 years ago

0.33.5

3 years ago

0.33.2

3 years ago

0.33.1

3 years ago

0.33.0

3 years ago

0.33.0-alpha.4

3 years ago

0.33.0-alpha.0

3 years ago

0.32.5

3 years ago

0.32.1

3 years ago

0.32.0

3 years ago

0.31.26

3 years ago

0.31.22

3 years ago

0.31.21

3 years ago

0.31.20

3 years ago

0.31.15

3 years ago

0.31.14

3 years ago

0.31.11

3 years ago

0.31.10

3 years ago

0.31.9

3 years ago

0.31.8

3 years ago

0.31.6

3 years ago

0.31.5

3 years ago

0.31.4

3 years ago

0.31.2

3 years ago

0.31.0

3 years ago

0.30.10

3 years ago

0.30.9

3 years ago

0.30.8

3 years ago

0.30.7

3 years ago

0.30.6

3 years ago

0.30.5

3 years ago

0.30.4

3 years ago

0.30.2

3 years ago

0.30.3

3 years ago

0.30.1

3 years ago

0.29.16

3 years ago

0.30.0

3 years ago

0.29.8

3 years ago

0.29.7

3 years ago

0.29.6

3 years ago

0.29.3

3 years ago

0.29.2

3 years ago

0.29.0

3 years ago