рд╣рдо рдереЛрдбрд╝рд╛ OpenID- рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдЫрд╡рд┐

рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреЗрдЦреЛ



рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЦрд╛рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдиреЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдУрдкрдирдЖрдИрдбреА-рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЖрджрдд рдмрдирд╛ рджреА рд╣реИ, рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛ рд╕рдХреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди OAuth рддрдХрдиреАрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рдЬреЛ рдХреБрдЦреНрдпрд╛рдд рдЯреНрд╡рд┐рдЯрд░ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рд╣рд╡рд╛рд▓реЗ рд╕реЗ, "рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ (рддреАрд╕рд░реЗ рдкрдХреНрд╖) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред ) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдбред "

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдкреНрд░рд╡реГрддреНрддрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢ рдХрд░рддреА рд╣реИ, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрднрдЧ рдпрдХреАрди рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдРрд╕реА рддрдХрдиреАрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдвреЗрд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдореИрд╢рдЕрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓реЗрдХрд┐рди рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднреВрд▓реА рдЧрдИ рдпрд╛рд╣реВ рдкрд╛рдЗрдкреНрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рд┐рд░реНрдл рджрд┐рд▓ рдФрд░ рджрд┐рдорд╛рдЧ рдирд╣реАрдВ рдЬреАрдд рд╕рдХрддреА рдереА рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рдордп рдЕрднреА рддрдХ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ред ред рд╢рд╛рдпрдж рдЕрднреА рднреА рдЖрдиреЗ рдХреЗ рд▓рд┐рдП), рдФрд░ рдпрд╣ рдареАрдХ рдРрд╕рд╛ "рд░реВрдк рдХрд╛рд░рдХ" рд╣реИ рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдРрд╕реА рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЧрд╛рдпрди рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдореБрдЭреЗ рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реЛрдВрдЪ рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рд╕рднреА рдиреЗ рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЬрдм рдЖрдк рдЗрд╕ рдпрд╛ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рдИрдВ рдФрд░ рдЕрдпреЛрдЧреНрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ allbooksmusicwarezzz.omgsu рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рдирд╛рдо рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдирд╣реАрдВ, рдмрд╛рдд рдЪреЛрд░реА рдХреА рдирд╣реАрдВ рд╣реИ, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдШреБрдЯрдиреЗ рдкрд░ рдмрдиреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдмрд╛рдбрд╝ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд▓реЙрдЧрд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдорд╛рдирд╡ рдореЗрдореЛрд░реА рд╕реАрдорд┐рдд рд╣реИ, рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ OpenID рдкреНрд░рджрд╛рддрд╛, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд░реЛрдз рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдИ-рдореЗрд▓, рдкреВрд░рд╛ рдирд╛рдо, рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛, рдЖрджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдкрд░, рдЖрдк рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЧреБрдкреНрдд рд░рдЦрдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрдЦрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рд╡рд╣ рдЕрдЧрд▓реА рд╕рд╛рдЗрдЯ рдкрд░ рдЧрдпрд╛ рдФрд░ рдЙрд╕рдиреЗ рдорд┐рддреНрд░рд╡рдд рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рд╡рд╛рд╕реНрдпрд╛!" рджреЗрдЦрд╛, рд╢реБрджреНрдз рд░реВрд╕реА рдореЗрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓, рдкреНрдпрд╛рд░реЗ рдкреНрдпрд╛рд░реЗ рдмрд┐рд▓реНрд▓реА рдХреЗ рдЕрд╡рддрд╛рд░, рдЖрджрддреЛрдВ рдФрд░ рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛ред ?



рд╣рдо рд╡реНрдпрд╛рдкрд╛рд░ рдФрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ



рдмрд╣реБрдд рд╕реЗ рдЧреАрдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ - рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╡рд╛рди рд╕рд╛рдЧрд▓реЗрд╡ рдХреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реНрддреБрддрд┐рдпрд╛рдВ рдФрд░ рддрд░реНрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╛рдЗрдерди рдореЗрдВ рдУрдкрдирдЖрдИрдбреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ рд╡рд░реАрдпрддрд╛ рдФрд░ рдкрд┐рдпрд╛рдиреЛрд╡рд╛рджрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рд▓реЙрдЧрд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрдпрд╛рдЧрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдХреЗрд╡рд▓ рдУрдкрдирдЖрдИрдбреА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред Pylons рдХреЛ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдУрдкрдиреЛ рдХреЛ Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреЗрдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдирд╛рдо django-openid рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИред Pylons рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, AuthKit рдирд╛рдордХ рдПрдХ рд╕рдорд╛рдзрд╛рди рднреА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рднреА рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯ рдорд┐рд▓реЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░-рдУрдкрдирд┐рдб рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ (URL рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░, рдирд┐рдХрдЯрддрдо рдПрд╕реЛрд╕рд┐рдПрд╢рди Djangian views.py) рдмрдирд╛рдПрдВ рдФрд░ рд╕рдВрдпреЛрдЬрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

$ paster controller auth





рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдХреЛрдб рдЙрд╕ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИ рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд╕рдЬреНрдЬрдиреЛрдВ, рд░рдЪрдирд╛рдХрд╛рд░реЛрдВред рд╢реБрд░реБрдЖрдд рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ:

Copy Source | Copy HTML



  1. OpenID.consumer.consumer рд╕реЗ рдХрдВрдЬреНрдпреВрдорд░, SUCCESS, FAILURE, DiscoveryFailure рдЖрдпрд╛рдд рдХрд░реЗрдВ
  2. Openid.store рд╕реЗ рдЖрдпрд╛рдд рдлрд╝рд╛рдЗрд▓рд╕реНрдЯреЛрд░
  3. рдЦреБрд▓реЗ рдЖрдпрд╛рдд рдЖрдпрд╛рдд рд╕реЗ
  4. рдЖрдпрд╛рдд рд╕реЗ
  5. рд╣реИрд╢рд▓реАрдм рдЖрдпрд╛рдд md5 рд╕реЗ
  6. рд╡рд░реНрдЧ AuthController (BaseController):
  7. def __before__ (рд╕реНрд╡):
  8. self .openid_session = session.get ( "openid_session" , {}) # рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ openid рд╕рддреНрд░ рдореМрдЬреВрдж рд╣реИрдВ
  9. рдбреАрдИрдИ рд╕реВрдЪрдХрд╛рдВрдХ (рд╕реНрд╡):
  10. рд░рд┐рдЯрд░реНрди рд░реЗрдВрдбрд░ ( '/accounts/enter.html' )
  11. @ rest.dispatch_on (POST = "signin_POST" ) # рд╣рдо рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЧреЗрдВрджрдмрд╛рдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ GET рдФрд░ POST рдЕрдиреБрд░реЛрдз рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ
  12. рдбреАрдИрдПрди рд╕рд╛рдЗрдирдЗрди (рд╕реНрд╡):
  13. if c.user: # рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рд╣реБрдЖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ
  14. рд╕рддреНрд░ [ 'рд╕рдВрджреЗрд╢' ] = 'рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдЗрди рдЗрди рд╣реИред'
  15. session.save ()
  16. рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ (url (рдПрдХреНрд╢рди = 'рдЗрдВрдбреЗрдХреНрд╕' )) # рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЬрд╛рдиреЗ рди рджреЗрдВ
  17. session.clear ()
  18. рд╡рд╛рдкрд╕реА рд░реЗрдВрдбрд░ ( '/index.html' )




рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдкрд░ рдЖрддреЗ рд╣реИрдВ:



Copy Source | Copy HTML



  1. рдбреАрдИрдПрди рд╕рд╛рдЗрдирдЗрди_рдкреЛрд╕реНрдЯ (рд╕реНрд╡рдпрдВ):
  2. problem_msg = 'рдЖрдкрдХреЗ OpenID рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдореНрдкреНрд░реЛрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ред рдХреГрдкрдпрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред '
  3. g.openid_store = filestore.FileOpenIDStore ( 'ред' ) # OpenID рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд╕реНрдЯреЛрд░реЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреА рдпрд╣рд╛рдВ рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ Pylons рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ
  4. рд╕реНрд╡рдпрдВ .consumer = рдЙрдкрднреЛрдХреНрддрд╛ ( рд╕реНрд╡рдпрдВ .openid_session, g.openid_store) # рд╣рд╛рдБ, рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдЧреНрд░рд╛рд╣рдХ рд╣реИ
  5. Openid = request.params.get ( 'рдУрдкрдирд┐рдб' , рдХреЛрдИ рдирд╣реАрдВ) # рдЕрдиреБрд░реЛрдз рд╕реЗ OpenID рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  6. ...




рд╣рд╛рдБ, рдФрд░ рдпрд╣рд╛рдБ рдХреБрдЫ рдЬрд╛рджреВ рд╣реИред SReg рд╡рд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрд┐рди рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдореВрд▓реНрдп рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реВрдЪреА рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛, рдпрджрд┐ рдХреБрдЫ рднреА рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╕реАрдзреЗ рдирд╛рдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рджреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред



Copy Source | Copy HTML



  1. ...
  2. sreg_request = sreg.SRegRequest (
  3. #required = ['рдИрдореЗрд▓'],
  4. рд╡реИрдХрд▓реНрдкрд┐рдХ = [ 'рдлреБрд▓рдирд╛рдо' , 'рдЯрд╛рдЗрдордЬрд╝реЛрди' , 'рднрд╛рд╖рд╛' , 'рдИрдореЗрд▓' , 'рдЙрдкрдирд╛рдо' ]
  5. )
  6. рдЕрдЧрд░ рдУрдкрдирд┐рдб рдХреЛрдИ рдирд╣реАрдВ рд╣реИ:
  7. рд╕рддреНрд░ [ 'рд╕рдВрджреЗрд╢' ] = problem_msg
  8. session.save ()
  9. рд╡рд╛рдкрд╕реА рд░реЗрдВрдбрд░ ( '/index.html' )
  10. ...




рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ freebie рдХреА рдЕрдиреБрдорддрд┐ рджреА рдФрд░ рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рд▓ OpenID рдФрд░ Google рдЦрд╛рддреЗ рд╕реЗ рдХреНрд░реЙрд╕-рд▓реЙрдЧрд┐рди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Google рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлреЙрд░реНрдо vasya_pupkin.google.com рдХреЗ рдУрдкрдирдЖрдИрдбреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реИред рд╕рднреА Google рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг URL рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ - www.google.com/accounts/o8/id ред рдпрд╣ рдЙрддреНрд╕реБрдХ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЗрд╕ URL рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Google рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд XRDS (XML- рдкреНрд░рдХрд╛рд░ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ OpenID 2.0 рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ) рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ , рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ OpenIDред

Copy Source | Copy HTML



  1. рдЕрдЧрд░ Openid == 'google' :
  2. рдУрдкрдирд┐рдб = 'https://www.google.com/accounts/o8/id'
  3. рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
  4. рдСрдХреНрдЯреНрд░реЗрдХреНрд╡реЗрд╕реНрдЯ = рд╕реНрд╡рдпрдВ .consumer.begin (рдУрдкрдирд┐рдб) # рдлрд▓рдХ
  5. рдбрд┐рд╕реНрдХрд╡рд░реАрдлреЗрд▓ рдХреЛ рдЫреЛрдбрд╝рдХрд░ , e: # рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкрддрд╛ рдпрд╛ рдРрд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ?
  6. рд╕рддреНрд░ [ 'рд╕рдВрджреЗрд╢' ] = problem_msg
  7. session.save ()
  8. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ (url (рдирд┐рдпрдВрддреНрд░рдХ = 'рд╕рд╛рдорд╛рдиреНрдп' , рдХреНрд░рд┐рдпрд╛ = 'рд╕рд╛рдЗрдирдЗрди' ))
  9. difrequest.addExtension (sreg_request) # рд╣рдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП SReg рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ
  10. redirecturl = difrequest.redirectURL (h.url_for ( '/' , рдпреЛрдЧреНрдп = рд╕рддреНрдп),
  11. return_to = h.url_for (рдХреНрд░рд┐рдпрд╛ = 'рд╕рддреНрдпрд╛рдкрд┐рдд' , рдпреЛрдЧреНрдп = рд╕рддреНрдп),
  12. рддрддреНрдХрд╛рд▓ = рдЧрд▓рдд
  13. ) # рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рднреА рдерд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  14. рд╕реЗрд╢рди [ 'openid_session' ] = self .openid_session
  15. session.save ()
  16. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ (url (рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд))




рдЦреИрд░, рдЕрдм рдЖрдк рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рджреЛрд╕реНрдд рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред



Copy Source | Copy HTML



  1. ...
  2. рд╕рддреНрдпрд╛рдкрд┐рдд рд╕рддреНрдпрд╛рдкрд┐рдд (рд╕реНрд╡):
  3. problem_msg = 'рдЖрдкрдХреЗ OpenID рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдореНрдкреНрд░реЛрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ред рдХреГрдкрдпрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред '
  4. self .consumer = рдЙрдкрднреЛрдХреНрддрд╛ ( рд╕реНрд╡рдпрдВ .openid_session, g.openid_store)
  5. рдЬрд╛рдирдХрд╛рд░реА = рд╕реНрд╡рдпрдВ .consumer.com рдЕрдкреВрд░реНрдг (рдЕрдиреБрд░реЛрдз.рдкреИрд░рд╛рдо, (h.url_for (рдирд┐рдпрдВрддреНрд░рдХ = 'рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ) )
  6. рдХреНрд░рд┐рдпрд╛ = 'рд╕рддреНрдпрд╛рдкрд┐рдд' ,
  7. рдпреЛрдЧреНрдп = рд╕рддреНрдп)))
  8. if info.status == SUCCESS: # рд╕рднреА рдПрдХ рдЭреБрдВрдб рдореЗрдВ
  9. sreg_response = sreg.SRegResponse.fromSuccessResponse (рдЬрд╛рдирдХрд╛рд░реА) # рд╣рдо SReg рдореЗрдВ рдЕрдиреБрд░реЛрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
  10. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (by_openid = info.identity_url) # рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  11. рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ .exist рдирд╣реАрдВ рд╣реИ : # рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ
  12. newuser = рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ()
  13. рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
  14. рдИрдореЗрд▓ = sreg_response.get ( 'рдИрдореЗрд▓' , u '' ),
  15. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ :
  16. рдИрдореЗрд▓ = u ''
  17. newuser.create (
  18. рдУрдкрдирд┐рдб = рдпреВрдирд┐рдХреЛрдб (info.identity_url),
  19. рдИрдореЗрд▓ = рдИрдореЗрд▓,
  20. рдкрд╛рд╕рд╡рд░реНрдб = рдпреВрдирд┐рдХреЛрдб ( md5 (info.identity_url) .hexdigest ()),
  21. ip = request.environ [ 'REMOTE_ADDR' ]
  22. )
  23. session.clear () # рдореИрд▓рд╛ рд╕рддреНрд░
  24. рд╕рддреНрд░ [ ' рдУрдкрдирд┐рдб ' ] = info.identity_url
  25. session.save ()
  26. рдпрджрд┐ рд╕рддреНрд░ рдореЗрдВ 'рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд_рдлреНрд░реЗрдо' :
  27. red_url = session [ 'redirected_from' ]
  28. рдбреЗрд▓ (рд╕рддреНрд░ [ 'рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд_рдлреНрд░реЗрдо' ])
  29. session.save ()
  30. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ (url (red_url))
  31. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ (url (рдирд┐рдпрдВрддреНрд░рдХ = 'рдиреАрддрд┐' , рдХреНрд░рд┐рдпрд╛ = 'рд╕реВрдЪрдХрд╛рдВрдХ' ))
  32. рдФрд░ : # рдлрдХреАрд░ рдирд╢реЗ рдореЗрдВ рдерд╛
  33. рд╕рддреНрд░ [ 'рд╕рдВрджреЗрд╢' ] = problem_msg
  34. session.save ()
  35. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ (url (рдХрд╛рд░реНрд░рд╡рд╛рдИ = 'рд╕рд╛рдЗрдирдЗрди' ))




рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ - рдХреБрдХреАрдЬрд╝ рдореЗрдВ рдЬреЛрд░, рдкрдВрдЬреАрдХрд░рдг рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдВ - рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЕрднреА рддрдХ, рдпрд╣ рдХреЛрдб рдпрд╛рд╣реВ рд╕реЗ рдУрдкрдирдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдЬрд╝рдорд╛ рдкреНрд░реБрддрдХреЛрд╡ рдХреЗ рд╡рд╕реАрдпрддрдирд╛рдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢рд┐рдХрд╛рд░ рдХреЛ рдЬрдбрд╝ рд╕реЗ рдЕрдкрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЗрд╡рд╛рди рд╕рдЧрд▓рд╛рд╡ рдХреЗ рдПрдХ рд╣реА рдмреНрд▓реЙрдЧ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ ред рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ OAuth рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХреЛрдб рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред



рдорд╛рд╕реНрдЯрд░ рд╡рд┐рдиреЛрдЧреНрд░рд╛рдбрд┐рдВрдХрд╛ рдХреА рддрд░рд╣, рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рдПрдХ рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдЦрд░реЛрдВрдЪрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд▓рд┐рдВрдХ рдФрд░ рд╕рднреА рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╡рд╣рд╛рдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред



UPD: рдорд╕реНрдЯреИрдВрдЧреЙрд╕реНрдЯреИрдВрдЧ рд╣реИрдмреНрд░рдпреВрд╕рд░ AX рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ (Google рд╕реЗ рд▓реМрдЯреА рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ) рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Google SReg рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



All Articles