
Google рдпрд╛ Envato рдЬреИрд╕реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрд╡рд╛рдУрдВ (
account.google.com ,
account.envato.com ) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдФрд░ рдЯреЛрдХрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдкрд░ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд░реВрдк рд╕реЗ -
рдПрдХрд▓ рд╕рд╛рдЗрди-рдСрди рдпрд╛
рдПрдХрд▓ рд╕рд╛рдЗрди-рдСрди рддрдХрдиреАрдХ ред
рдХреНрдпрд╛ рдЬрд░реВрд░рдд рдереА (1) "рд▓реЙрдЧрд┐рди + рдкрд╛рд╕рд╡рд░реНрдб" рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдпрддрдГ рд╕рднреА рд╕рд╛рдорд╛рдЬрд┐рдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд╡рд╛ рдереА, (2) рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рдеред
рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛ (3) рдЙрди рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ (4) рдпрд╣ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХрд╛рд░реНрдп рдЧреИрд░-рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдпрд╣ рд╕рдм рдПрдХ рдЙрдкрдпреЛрдЧреА рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдкреБрд░рд╛рдиреЗ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ - рд▓реЗрдЦрдХ рдиреЗ omniauth рд░рддреНрди рдФрд░ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдФрд░ рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░, рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд┐рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╕рдорд╛рди omniauth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕реЗрд╡рд╛рдПрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЫреВрдЯ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо + рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЯрд╛рдИ), рдЗрд╕рд▓рд┐рдП omniauth рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рд╢реБрд░реВ рд╣реБрдЖ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛
рддреАрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯ ,
рд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛, рдФрд░
рдУрдореНрдиреНрдпреБрде рдХрд╕реНрдЯрдо рд░рдгрдиреАрддрд┐ ред рд▓рд┐рдВрдХ рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рдЙрдард╛рдП рдЬрд╛рдПрдВрдЧреЗред
рд╣рдо
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 4000 рдкрд░ рдЪрд▓реЗрдВрдЧреЗред
Omniauth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдорд╛рдирдХ рд╣реИ:
- Gemfile рдореЗрдВ рд╣рдо omniauth рдФрд░ рд╣рдорд╛рд░реА omniauth- рдЦрд╛рддреЛрдВ рдХреА рд░рдгрдиреАрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
gem 'omniauth' gem 'omniauth-accounts'
- рдмрдВрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ / omniauth.rb рдореЗрдВ, рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдбрд╛рд▓реЗрдВ:
Rails.application.config.middleware.use OmniAuth::Builder do provider :accounts, ENV['ACCOUNTS_API_ID'], ENV['ACCOUNTS_API_SECRET'], client_options: { site: ENV['ACCOUNTS_API_SITE'] } end
- рд░рд╛рдКрдЯрд░.рдмреАрдЖрд░рдмреА рдореЗрдВ, рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
match '/auth/:provider/callback', :to => 'auth#callback'
- рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо request.env рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред ['omniauth.auth'] рдбреЗрдЯрд╛ рдФрд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рд╣реИрд╢
rails g controller auth --skip-assets
рд╡рд╣ рд╕рдм, рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗред
рдорд╛рдирдХ oauth 2.0 рд░рдгрдиреАрддрд┐ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди, рдУрдордиреАрде-рдУрдЙрде 2 рдирд┐рд░реНрднрд░рддрд╛ Gemspec рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдмрд╣реБрдд рдХрдо рдХреЛрдб рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣реИ:
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреАрдЬрд╝ (ACCOUNTS_API_ID рдФрд░ ACCOUNTS_API_SECRET)
- рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдХрд╛ рдкрддрд╛ ACCOUNTS_API_SITE
- рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрддрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: / рдкреНрд░рд╛рдзрд┐рдХреГрдд) редред
- ... рдФрд░ рдЯреЛрдХрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (/ рдЯреЛрдХрди)
рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд░рдгрдиреАрддрд┐ рдЖрдЧреЗ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИред рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЕрдкреНрд░рд┐рдп рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдгрдиреАрддрд┐ "рдЦреЛ рдЬрд╛рддреА рд╣реИ" - рдпрд╣ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ - рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд╣рдо
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 рдкрд░ рдЪрд▓реЗрдВрдЧреЗред
рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ:
- рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
- рдПрдХ рдЕрдиреНрдп рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдорд╛рдирдХ рдУрдореНрдирд┐рдереНрдп рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдХрд╕реНрдЯрдо рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг - рдПрдХ рдХрд╕реНрдЯрдо рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рд╕рд╛рдЭрд╛ рд▓рд┐рдВрдХ - рдЦрд╛рддрд╛:
- рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╡реЗрд╢ рдХреЗ рддрд░реАрдХреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реИрдВ (рд╣рдм рдкрд░ рдПрдХ рд╣рд╛рдЙрд╕рдХреАрдкрд░ рдХреА рддрд░рд╣)
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЕрдиреБрджрд╛рди рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реИрдВред
рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрди
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдлреЗрд╕рдмреБрдХ рдпрд╛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рднрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧреА - рдЗрд╕реЗ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрдВред рдПрдХрд▓ рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдореЗрдВ рд╕реЗрд╡рд╛рдПрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯреЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЧреАред
рдпрд╣ рд╡рд┐рд╖рдп рдкрд╣рд▓реЗ рд╣реА рд╣рдмрд░ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рдлрд┐рд╕рд▓ рдЧрдпрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЕрднреА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рдЦрд╛рддрд╛ рдорд░реНрдЬ рд╡рд┐рдХрд▓реНрдк
- рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдЦрд╛рддрд╛ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛
- рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдЦрд╛рддреЗ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдпреЗ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрди - рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЛ рд▓реЙрдЧрд┐рди + рдкрд╛рд╕рд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рд╣реИред рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдЦрд╛рддрд╛ рдорд░реНрдЬ
рд╣рдо gmail-box рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧрдП - рд╕рд┐рд╕реНрдЯрдо рдиреЗ gmail рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рд╡реЗ рдлреЗрд╕рдмреБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рд╣реБрдП, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ рдерд╛ ... рдпрд╛рдж рд░рдЦреЗрдВ ... рдЬреАрдореЗрд▓! рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЬреАрдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЦрд╛рддреЗ рдПрдХ рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рдареАрдХ рджреЛ рдкреИрд╕реЗ рдХреА рддрд░рд╣! .. рдпрд╛ рдирд╣реАрдВ - рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдбреЗрдЯрд╛ рдорд░реНрдЬред
рдЬреАрдореЗрд▓ рдореЗрдВ рд╣рдо рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдкреЛрд▓реЛрд╡рд┐рди рд╣реИрдВ, рдФрд░ рдлреЗрд╕рдмреБрдХ рдкрд░ рд╣рдо рдПрд▓реЗрдХреНрд╕ рдкреЛрд▓реЛрд╡рд┐рди рд╣реИрдВред рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдорд░реНрдЬ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреНрдпрд╛ рдЫреЛрдбрд╝рдирд╛ рд╣реИ? рдирд╣реАрдВ, рдпрд╣ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕рдлрд▓ рдЙрдкрдХреНрд░рдо рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдЬрд┐рд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдкрд╣рд▓реЗ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рдЦрд╛рддреЗ рд╕реЗ рджреЛрдмрд╛рд░рд╛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХреЗ, рдЙрд╕рдХреЗ рдкрд╛рд╕ "рдмрджрд▓реЗрдВ" рдФрд░ "рдмрджрд▓реЗрдВ рд╕рдм рдХреБрдЫ" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╡рд╛рджреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред
рдореЗрд░рд╛ рдирд┐рд░реНрдгрдп рдЦрд╛рддрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ "рд░рд┐рдЬрд░реНрд╡ рдореЗрдВ" рдЬреЛрдбрд╝рдирд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдЦрд╛рддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╣реИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣реИрд╢ рдорд░реНрдЬ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рд░реВрдк рд▓реЗ рд╕рдХрддрд╛ рд╣реИ (рд╕рд╢рд░реНрдд рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ - рдЖрдзрд╛ рдПрд▓реЗрдХреНрд╕):
{ name: [' ', 'Alex Polovin', ' '], first_name: ['', 'Alex', ''], sir_name: ['', 'Polovin'], ... }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ "рд╣рд╛рдл" рдХреЛ "рдЕрдВрддрд┐рдо рдирд╛рдо" рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред
рдЦрд╛рддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗред рд╕реЗрд╡рд╛рдПрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЕрд╡рддрд╛рд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдереЛрдбрд╝рд╛ рдХрдо рдЕрдХреНрд╕рд░ - рдкреГрд╖реНрдареЛрдВ (рдпреВрдЖрд░рдПрд▓ рдкреИрд░рд╛рдореАрдЯрд░) рдХреЗ рд▓рд┐рдВрдХ, рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЙрдкрдирд╛рдо рдФрд░ рд╡рд┐рд╡рд░рдгред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ ... рдпрд╛ рдкреБрд░рд╛рдиреЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ - рд╕рднреА рдХреЗ рдмрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ - рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗ рдмрд┐рдирд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирдП рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдЦрд╛рддреЗ рд╕реЗ рдЬреЛрдбрд╝рдирд╛
рд╣рдм рдкрд░ рдПрдХ рд╣рд╛рдЙрд╕рдХреАрдкрд░ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ - рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЪрд╛рд▓реВ рдЦрд╛рддреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦрд╛рддрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд╕рдВрдкрд╛рджрди
рд╕рднреА рдХреНрд╖реЗрддреНрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗ рднрд░реЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИрдВред рд╕реЗрд╡рд╛рдПрдВред рдкреНрд░рджрд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рд╣реА рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рднрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рднреА - рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдКрдкрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрджрд░реНрд╢
- рдЦрд╛рддрд╛ - рдбреЗрдЯрд╛ рд╣реИрд╢ (рдЬрд╛рдирдХрд╛рд░реА) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ
- рдкреНрд░рдорд╛рдгреАрдХрд░рдг - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдлреЗрд╕рдмреБрдХ, рдЯреНрд╡рд┐рдЯрд░, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдкрд░ omniauth рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ;
рдХреНрд░рдо рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣реИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП: рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдФрд░ рдХреЛрдб рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:
serialize :info, Hash
рдореЙрдбрд▓ рдХреЗ рдмреАрдЪ - рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз:
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ
рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╕рднреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрд░реВрд░рддреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- (рдбреЗрдЯрд╛) рд▓реЙрдЧ рдЗрди рдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда
- logout (/ logout) - рд▓реЙрдЧрдЖрдЙрдЯ
- рдХреЙрд▓рдмреИрдХ (/ рд╕рд╛рдорд╛рдиреНрдп /: рдкреНрд░рджрд╛рддрд╛ / рдХреЙрд▓рдмреИрдХ) - рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдореБрдЦреНрдп рдХрд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ, рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╡рд┐рдлрд▓рддрд╛ (/ рд╕рд╛рдорд╛рдиреНрдп / рд╡рд┐рдлрд▓рддрд╛) - рдпрджрд┐ рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп "рджреВрд╕рд░реЗ рдЫреЛрд░" рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд
- detach (/ Ord / detach) - рдЪрд╛рд▓реВ рдЦрд╛рддреЗ рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рдУрдореНрдирд┐рдпрд╛рде рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдХреБрдЯ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:
- рдкреНрд░реЛрдлрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
- рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд╛рддреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- рдЪрд╛рд▓реВ рдЦрд╛рддреЗ рдореЗрдВ рдПрдХ рдирдИ рд╕реЗрд╡рд╛ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ
- рдкреБрдирдГ рд▓реЙрдЧрд┐рди рдпрд╛ рдкреНрд░рд╛рдердорд┐рдХ рд▓реЙрдЧрд┐рди
рдЪрдпрдирд┐рдд рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рд╣реИрд╢ рдПрдХ рдЕрд▓рдЧ рдирд┐рдЬреА рд╡рд┐рдзрд┐ get_data_hash () рдореЗрдВ рдмрдирддрд╛ рд╣реИред рд╕реЗрд╡рд╛ред
рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, add_info рдореЙрдбрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░):
def add_info(info) self.info.merge!(info){|key, oldval, newval| [*oldval].to_a | [*newval].to_a} end
рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП add_authentication:
def add_authentications(authentications) self.authentications << authentications end
рдирддреАрдЬрддрди, рд╕рддреНрд░ рдЙрд╕ рдЦрд╛рддреЗ рдХреА рдЖрдИрдбреА рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╕рддреНрд░ [: account_id]ред
рдЗрд╕ рдЪрд░рдг рдореЗрдВ AccountController рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╕реВрдЪрдХрд╛рдВрдХ - рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓
- рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ - рдЦрд╛рддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
- рдЕрджреНрдпрддрди - рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рд╕рдВрдкрд╛рджрди рд╕реЗ POST рдЕрдиреБрд░реЛрдз)
рдФрд░ рдПрдХ рдлрд┐рд▓реНрдЯрд░ - рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЬрд╛рдВрдЪ (рдкреНрд░рд╡реЗрд╢ рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде)ред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд▓рдЪреАрд▓реЗ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдЕрднреА рднреА рдЦрдбрд╝реЗ рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рддрдХ - рд╕рдВрдкрд╛рджрди рджреЛ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:
- рдпрджрд┐ js рдЕрдХреНрд╖рдо рд╣реИ - рдПрдХ YAML- рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рд╣реИ
- рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░, jsoneditor json рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдирдХ рдЕрднреНрдпрд╛рд╕ рдкреНрд░рджрд╛рддрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдмрдирд╛рдирд╛ рд╣реИред рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рдкрддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдмрд▓реНрдХрд┐ рдХреЙрд▓рдмреИрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрддрд╛) - рдФрд░ рд╣рдореЗрдВ рджреЛ рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИрдВ - рдЖрдИрдбреА рдФрд░ рдЧреБрдкреНрддред рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдЬрд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ - рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реЗрдореА рдкреНрд▓рдЧрдЗрди, рдпрд╛ рд░реЗрд▓ рдХреЗ рд▓рд┐рдП рд░рддреНрди рд╣реЛред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд╛рдмрд┐рдпрд╛рдБ omniauth - ACCOUNTS_API_ID рдФрд░ ACCOUNTS_API_SECRET рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЖрд╡реЗрджрди рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
rails g scaffold Application name:string uid:string secret:string redirect_uri:string account_id:integer rake db:migrate
рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╕рдордп, рдореЙрдбрд▓ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
before_create :default_values def default_values self.uid = SecureRandom.hex(16) self.secret = SecureRandom.hex(16) end
рдФрд░ - рдЖрд╡реЗрджрди рдкрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
@applications = Application.all
рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
@applications = Account.find(session[:account_id]).applications
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдирд▓рд╛рдЗрди рд╣реИ - рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд▓рдЧрд╛рдПрдВ:
before_filter :check_authentication def check_authentication if !session[:account_id] redirect_to auth_path, notice: ' , .' end end
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реЗрдЦ
рдкреНрд░рдорд╛рдгреАрдХрд░рдг oauth 2.0 рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЖрдк рд╣рдм рдкрд░, рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрддрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ- site.com/auth/accounts рд╣реИред рдУрдордирд┐рдпрд╛рде рдЗрд╕реЗ рдЙрдард╛рддрд╛ рд╣реИ рдФрд░, рдУрдордиреАрде-рдЕрдХрд╛рдЙрдВрдЯреНрд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдУрдореНрдирд┐рдпреБрде рд░рд╛рдЬреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдЯ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдорд╛рдирдХ, рдкреНрд░рджрд╛рддрд╛- site.com/authorize рдкрд░), рдФрд░ рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрджрд╛рди рджреЗрдирд╛ рд╣реИред
рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдХреЗ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ request.env ['omniauth.auth'] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕рд╛рдЗрдЯ рд╕реЗ рдЯреЛрдХрди рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реИрд╢ рдорд┐рд▓рддрд╛ рд╣реИред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдВрдзреЗрд░реА рдЬрдЧрд╣ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрджрд╛рди рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ (рджреЛрд╣рд░рд╛рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде) - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЗрдВ рдкреВрд░реА рдХреА рдЬрд╛рддреА рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░ рдЪреБрдХрд╛ рд╣реИ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрджрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ
- рдпрд╣ рдЕрдиреБрджрд╛рди рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдХреЗ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрджрд╛рди рдХреЛрдб рдФрд░ рд░рд╛рдЬреНрдп рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрд░рдиреЗ рджреЗрдВ
- рдпрджрд┐ рдЕрдиреБрджрд╛рди рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВред
- рдпрджрд┐ рдЕрдиреБрджрд╛рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдиреБрджрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рд╛рдЗрдЯ рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реЛрд╢рд▓ рд╕рд╛рдЗрдЯреНрд╕ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕реЗрд╡рд╛рдПрдВ (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЕрдВрддрд┐рдо рдХрд╛рд░рдг рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ - рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рдУрдореНрдирд┐рдпрд╛рде рдЕрдкрдиреЗ рдЕрдкреНрд░рд┐рдп рдкрдХреНрд╖реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдУрдореНрдирд┐рде, рдЬрдм рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ url рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рддреНрд░ рдореЗрдВ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдкрджреНрдзрддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрдЪрд╛рдирдХ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдУрдореНрдирд┐рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рддреЛ рдСрдореНрдирд┐рдпрд╛рде рд╕рддреНрд░ рд╕реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдорд┐рдЯрд╛ рджреЗрдЧрд╛ред рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ OmniAuth :: рд░рдгрдиреАрддрд┐рдпрд╛рдБ :: OAuth2 :: CallbackError - рдЕрдорд╛рдиреНрдп_credentialsред
рдЗрд╕рд▓рд┐рдП, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рддреНрд░ рдореЗрдВ рд╕рднреА omniauth рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдмрд╣рд╛рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЖрджреЗрд╢ # рд░рдЬрд┐рд╕реНрдЯрд░
рдпрджрд┐ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐, omniauth рд╕реЗ рдЕрдиреБрд░реЛрдз рдЖрдпрд╛ рд╣реИ) - рд╡рд░реНрддрдорд╛рди рд╕рддреНрд░ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдВ - "рдЕрдиреБрджрд╛рди рдЖрджреЗрд╢" рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
session[:grants_orders] = Hash.new if !session[:grants_orders] session[:grants_orders].merge!( params[:client_id] => { redirect_uri: params[:redirect_uri], state: params[:state], response_type: params[:response_type], 'omniauth.params' => session['omniauth.params'], 'omniauth.origin' => session['omniauth.origin'], 'omniauth.state' => session['omniauth.state'] } )
рдЖрджреЗрд╢ # рд╢реЛ
рд╣рдо рдпрд╣рд╛рдВ рд╕рднреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдирд▓рд╛рдЗрди рд╣реИ, рдХреНрдпрд╛ рдЙрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдЖрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдХреЛрдИ рдкреБрд░рд╛рдирд╛ рдЕрдиреБрджрд╛рди рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
- рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рддреЛ рд╣рдо рддреБрд░рдВрдд рдЕрдиреБрджрд╛рди рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ
- рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рддреЛ рд╣рдо рдкреГрд╖реНрда рдХреЛ рдРрд╕реА рдкреНрд░рдорд╛рдгрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ ("рдЖрд╡реЗрджрди рдЦрд╛рддреЗ рдореЗрдВ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ", "рдЕрдиреБрдорддрд┐ рджреЗрдВ", "рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ")

рдЖрджреЗрд╢ # рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
рдпрджрд┐ рдЕрдиреБрджрд╛рди рддрддреНрдХрд╛рд▓ рдЙрдкрд▓рдмреНрдз рдерд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдорд┐рд▓рд╛рди рд╕реЗ рдпрд╛ рдЕрдиреБрджрд╛рди рдЖрджреЗрд╢ рдкреГрд╖реНрда рдкрд░ "рдЕрдиреБрдорддрд┐ рджреЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╣рдо рд╕рддреНрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕рднреА omniauth рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд░рддреЗ рд╕рдордп рдЙрдиреНрд╣реЗрдВ omniauth рджреНрд╡рд╛рд░рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ
- рдПрдХ рдЕрдиреБрджрд╛рди рдмрдирд╛рдПрдБ рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ
рдЖрджреЗрд╢ # рдЗрдирдХрд╛рд░
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдЗрд╕реЗ рд╕рддреНрд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
рдЕрдиреБрджрд╛рди # рдЯреЛрдХрди
рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдЖрд╡реЗрджрди рдФрд░ рдЕрдиреБрджрд╛рди рдкрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рддреЛ рд╣рдо рдЕрдиреБрджрд╛рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред
рдЦрд╛рддреЗ # get_info
рд╣рдо рд╣реИрд╢ рдХреЛ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╣рдордд рд╣реИ - рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
data_hash = grant.account.info hash = Hash.new hash['id'] = grant.account.id data_hash.each do |key, value| if value.kind_of?(Array) hash[key] = value[0] else hash[key] = value end end render :json => hash.to_json
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ - рдФрд░ рдЗрд╕рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
- рдПрдХ рдЖрд╡реЗрджрди рдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ - рддреЛ рдЙрд╕реЗ рд╕реАрдзреЗ рдЕрдиреБрджрд╛рди рд░рд╕реАрдж рдкреГрд╖реНрда рдкрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдВ
- рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо + рдкрд╛рд╕рд╡рд░реНрдб рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ - omniauth- рдкрд╣рдЪрд╛рди рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
- рди рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдкрд░, рдмрд▓реНрдХрд┐ рдкреНрд░рджрд╛рддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рднреА рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд▓реЙрдЧрдЖрдЙрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬреЛрдбрд╝реЗрдВ
- рдПрдХ рд▓рд╛рдкрддрд╛ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ toson рдФрд░ get_info json рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ (рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд░реЗрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, protect_from_forgery рдФрд░ verify_authenticity_token рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ)
рд╣рд░ рджрд┐рди рдЖрдкрдХреЛ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд▓рд┐рдЦрдиреА рд╣реИ - рдХреНрдпреЛрдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИрдВред Google, Envato, Yandex, Yahoo - рдФрд░ рдХреМрди рд╣реИ? рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ? рдФрд░ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рд╕реАрдПрдПрд╕ рддрдХрдиреАрдХ (рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ) рд╣реИ, рд╡рд╣рд╛рдБ рдУрдкрдирдЖрдИрдбреА рд╣реИ (рдФрд░, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣реА рд▓реЙрдЧрд┐рди)ред рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣рдмреНрд░ рдФрд░ рдЕрдиреНрдп рдЯреАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ - рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рд╕рд╛рде рд╣реА рдорд╛рд▓рд┐рдХрд╛рдирд╛ "рдХреАрдорд╛рд╕реНрдЯрд░"ред
рдореЗрд░реА рдкрд╕рдВрдж рдПрд╕рдПрд╕рдУ рдкрд░ рдХреНрдпреЛрдВ рдЧрд┐рд░реА? рд╢рд╛рдпрдж рдХреБрдВрдЬреА "рдХреЗ рд▓рд┐рдП" рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред рдпреЗ рд╡реЗ рднрд╛рд╡рдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рддрдм рдЕрдиреБрднрд╡ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╡рд╣ рд╕рд╛рдЗрдЯ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдкреВрдВрдЬреА "C" рдХреЗ рд╕рд╛рдеред рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рдЙрдиреНрдирдд, рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рднрд╛рд╡рдирд╛ рд╣реИ, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВред
