Last major update: 25.08.2020
- Что такое авторизация/аутентификация
- Где хранить токены
- Как ставить куки ?
- Процесс логина
- Процесс рефреш токенов
- Кража токенов/Механизм контроля токенов
[alias] | |
dad = "! echo ' ARE YA WINNING, SON?\n ⢸⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⡷⠑⢦⡀⠀⠀⠀⠀⠀\n ⢸⠀ ⠀⠀⠀⢀⠖⠒⠒⠒⢤⠀⠀⠀ ⠀⡇⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀\n ⢸⠀ ⠀⣀⢤⣼⣀⡠⠤⠤⠼⠤⡄⠀ ⠀⡇⠀⠀⠀⠀⠀⠙⢄⠀⠀⠀⠀\n ⢸⠀ ⠀⠑⡤⠤⡒⠒⠒⡊⠙⡏⠀⢀⠀ ⡇⠀⠀⠀⠀⠀⠀⠀⠑⠢⡄⠀\n ⢸⠀ ⠀⠀⠇⠀⢄⣀⣀⣀⢀⠧⠟⠁⠀ ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀\n ⢸⠀ ⠀⠀⠸⣀⠀⠀⠈⢉⠟⠓⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⠈⢱⡖⠋⠁⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⣠⢺⠧⢄⣀⠀⠀⣀⣀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⣠⠃⢸⠀⠀⠈⠉⡽⠿⠯⡆⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⣰⠁⠀⢸⠀⠀⠀⠀⠉⠉⠉⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠣⠀⠀⢸⢄⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⠀⢸⠀⢇⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⠀⡌⠀⠈⡆⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⢠⠃⠀⠀⡇⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸\n ⢸⠀ ⠀⠀⠀⢸⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠷ ⢸\n '" |
L1 | |
Базовые знание диалекта Typescript, основных встроенных примитивов (Array, Object, Function, String, Date) и методов работы с ними, понимание контекста (this) и способов управления им | |
Базовые знания фреймворка React | |
Знание наиболее часто используемых Web API: fetch/XHR, Storage, PostMessage, DOM | |
Умение писать простейшие алгоритмы (поиск, сортировка, сравнение объектов) без требований к их оптимальности. | |
Навыки кроссбраузерной адаптивной верстки по макету с использованием существующего кода, знание CSS и препроцессора SCSS | |
Навыки отладки разметки в браузерах Chrome/Safari | |
Знание принципов работы HTTP, отличий между различными методами, принципов работы Cookies | |
Практическое владение лучшими практиками структурирования кода: SOLID/DRY/KISS и т.д. | |
Базовые знания git, понимание git flow |
class TestWorker | |
include ApplicationWorker | |
def perform() | |
puts "HUIHUIHUI, #{TestWorkerService.get_obj}" | |
end | |
end | |
module TestWorkerService | |
class << self |
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ |
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ |
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ |
websocket_info({Pid, ?WSBroadcast, Msg}, Req, State) -> | |
{message_queue_len, Count} = erlang:process_info(self(), message_queue_len), | |
lager:notice("queue ~p ", [Count]), % если закоментить эту строку, ветка Count > 500 не срабатывает | |
if | |
Count > 500 -> lager:notice("too many messages ~p", [Count]), | |
{shutdown, Req, State}; | |
true -> | |
{reply, {text, Msg}, Req, State} | |
end; |