Advertisement
Guest User

Untitled

a guest
Mar 16th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. import { navigate } from '@reach/router'
  2. import { IUserIdentity } from '../models/user'
  3.  
  4. // вновь определяем интерфейс для ответа от бэкэнда
  5. // где в качестве data - указываем any (то есть, что угодно)
  6. // здесь, это в качестве примера, так как бэкэнда у нас нет,
  7. // и мы не знаем, что от него может прийти (будто бы)
  8.  
  9. interface IAuthResponse {
  10. status: number;
  11. data?: any; [1]
  12. errorText?: string;
  13. }
  14.  
  15. // функция-заглушка, которая будто-бы проверяет админ это или нет
  16. // в качестве аргумента принимает тип IUserIdentity
  17. // в качестве результата - возвращает boolean значение (true или false)
  18.  
  19. const checkCredentials = (data: IUserIdentity): boolean => {
  20. if (data.username === 'Admin' && data.password === '12345') {
  21. return true
  22. } else {
  23. return false
  24. }
  25. }
  26.  
  27. // запрос к "псевдо-бэкэнду", принцип точной такой же, как и в случае с новостями
  28. // разница лишь в том, что теперь наша функция принимает 1 аргумент - data
  29. // вовзращает так же Promise<T>, где T - типа IAuthResponse
  30.  
  31. export const authenticate = (data: IUserIdentity): Promise<IAuthResponse> => {
  32. const promise = new Promise<IAuthResponse>((resolve, reject) => {
  33. if (!checkCredentials(data)) {
  34. reject({
  35. status: 500,
  36. errorText: 'incorrect_login_or_password',
  37. })
  38. }
  39. window.localStorage.setItem('tstz.authenticated', 'true')
  40. resolve({
  41. status: 200,
  42. data: 'ok', // так как наш псевдо-бэкэнд отвечает string, мы можем исправить в IAuthResponse [1] any на string
  43. })
  44. })
  45.  
  46. return promise
  47. }
  48.  
  49. // функция для проверки, авторизован ли пользователь
  50. // принимает 0 аргументов ()
  51. // вовзвращает true или false (тип boolean)
  52.  
  53. export const checkAuthStatus = (): boolean => {
  54. if (localStorage.getItem('tstz.authenticated')) {
  55. return true
  56. } else {
  57. return false
  58. }
  59. }
  60.  
  61. // функция для логаута, принимает 0 аргументов
  62. // ничего не возвращает (для этого используется тип void)
  63.  
  64. export const logout = (): void => {
  65. window.localStorage.removeItem('tstz.authenticated')
  66. navigate('/') // используем для переброса на новый url-адрес (reach-router)
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement