рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯ рдЬреВрдорд▓рд╛ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрддреНрдкрд╛рдж рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдкрд╛рдпрдерди / рдЬрд┐рдВрдЧреЛ рдмрдВрдбрд▓ рдХреЛ рдЪреБрдирд╛ред
рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдЬрд┐рдУрдЧреЛ рдореЗрдВ рдЬреВрдорд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреВрдорд▓рд╛ рдФрд░ Django рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЦрд╛рддреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
Django рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛, рдЬреЛ Django рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рдкрд╕рдВрдж рди рдЖрдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Django рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдХреБрдЫ рд╕рдордЭ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд╕рдВрднрд╡рддрдГ, Django рдХреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдореИрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐:
- рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╣реИ рд╡рд╣ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ JSON API рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
- рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Django рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯрд╛рд░реНрдЯрд░ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрдгрд┐рдд рд╣реИ
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рдЬреВрдорд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ (DB) рдХреЛ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- рдЬреВрдорд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЬреВрдорд▓рд╛рдЙрдЬрд╝рд░ рдореЙрдбрд▓ рдмрдирд╛рдПрдБ
- рдПрдХ
check_joomla_password()
рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореВрд▓ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмреИрдХрдПрдВрдб "рдЬреБрдорд▓рд╛ рдСрдереЗрдВрдЯрд┐рдХ рдмреИрдХрдПрдВрдб" рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЬрдм Django рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЬреВрдорд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛ рдорд┐рд▓реЗрдЧрд╛
1. рдЬреВрдорд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди:
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
2. рдПрдХ рдЬреВрдорд▓реЗрдЙрд╕рд░ рдореЙрдбрд▓ рдмрдирд╛рдПрдВ
- рдкрдврд╝реЗрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ Django рдореЙрдбрд▓ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдирдпрд╛ рдЬреВрдорд▓рд╛рдЙрдЬрд╝рд░ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдПред
рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдирд╛рдордХ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ ( manage.py startapp users
)ред рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмреИрдХрдПрдВрдб рдФрд░ рдЬреВрдорд▓рд╛ рдпреВрдЬрд░ рдореЙрдбрд▓ рд╣реЛрдЧрд╛ред - рдЗрдВрд╕реНрдкреЗрдХреНрдЯрдбрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ:
python manage.py inspectdb live_users --database="joomla_db"
joomla_db - рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ settings.py/DATABASES
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛/DATABASES;
live_users - рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдоред
рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ users/models.py
рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗрдВ:
class JoomlaUser(models.Model): """ Represents our customer from the legacy Joomla database. """ username = models.CharField(max_length=150, primary_key=True) email = models.CharField(max_length=100) password = models.CharField(max_length=100)
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рд╕рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЬреВрдорд▓реЗрдЙрд╕рд░ рдореЙрдбрд▓ рд╕реЗ рдЗрд╕рдХреЗ рдореВрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдореБрдЦреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ "db_routers.py" рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ (рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдБ рдЖрдкрдХрд╛ "settings.py" рд╣реИ:
settings.py
рдореЗрдВ рдПрдХ рдирдпрд╛ рд░рд╛рдЙрдЯрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
рдЕрдм рдЖрдк рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ Django рдЯрд░реНрдорд┐рдирд▓ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: python manage.py shell
>>> from users.models import JoomlaUser >>> print(JoomlaUser.objects.get(username='someuser')) JoomlaUser object (someusername) >>>
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ), рддреЛ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВред рдЕрдиреНрдпрдерд╛, рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░реЗрдВред
3. рдЬреВрдорд▓рд╛ рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреВрдорд▓рд╛ рдпреВрдЬрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
$2y$10$aoZ4/bA7pe.QvjTU0R5.IeFGYrGag/THGvgKpoTk6bTz6XNkY0F2e
Joomla v3.2 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб BLOWFISH рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛:
pip install bcrypt echo bcrypt >> requirements.txt
рдФрд░ users/backend.py
рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛:
def check_joomla_password(password, hashed): """ Check if password matches the hashed password, using same hashing method (Blowfish) as Joomla >= 3.2 If you get wrong results with this function, check that the Hash starts from prefix "$2y", otherwise it is probably not a blowfish hash :return: True/False """ import bcrypt if password is None: return False
рдЪреЗрддрд╛рд╡рдиреА! 3.2 рд╕реЗ рдХрдо Joomla рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЕрд▓рдЧ рд╣реИрд╢рд┐рдВрдЧ рд╡рд┐рдзрд┐ (md5 + рдирдордХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрдврд╝реЗрдВ
Stackoverflow рдкрд░ рдЪрд░реНрдЪрд╛ рдФрд░ рдПрдХ рд╣реИрд╢ рдЪреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЬреВрдорд▓рд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
4. рдмреИрдХрдПрдВрдб рдпреВрдЬрд░ рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рдЬреВрдорд▓рд╛
рдЕрдм рдЖрдк рдЬреВрдорд▓рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Django рдмреИрдХрдПрдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдХреИрд╕реЗ Django рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдВ
project/settings.py
рдореЗрдВ рдПрдХ рдирдпрд╛ рдмреИрдХрдПрдВрдб (рдЕрднреА рддрдХ рд╡рд┐рджреНрдпрдорд╛рди рдирд╣реАрдВ) рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
AUTHENTICATION_BACKENDS = [
users/backend.py
backend.py рдореЗрдВ рдПрдХ рдЬреВрдорд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмреИрдХрдПрдВрдб рдмрдирд╛рдПрдВ
from django.contrib.auth.models import User from .models import JoomlaUser def check_joomla_password(password, hashed):
рд╕рдВрдкреВрд░реНрдг
рдмрдзрд╛рдИ - рдЕрдм рдЖрдкрдХреА рдореМрдЬреВрджрд╛ Joomla рд╕рд╛рдЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирдИ рд╕рд╛рдЗрдЯ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдЕрдкрдиреА рд╕рд╛рдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдирдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрд░рд╛рдиреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдирдП рдореЗрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ Django (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд JoomlaUser рдореЙрдбрд▓) рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдП ред
рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рд╕рдВрдмрдВрдз рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдИ рдФрд░ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реЛрдВрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд╣рд╛рдВ рд╣реЛрдЧрд╛, рдХреМрди рд╕рд╛ рд╕рд╛рдЗрдЯ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореБрдЦреНрдп рд╣реЛрдЧрд╛, рдЖрджрд┐ред
рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди
рдЕрдм рдХреГрдкрдпрд╛ рдирдП рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реБрдП рдЙрдЪрд┐рдд рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рддрд░реНрдХ рдмрд╛рд░реАрдХреА рд╕реЗ Django рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрднреА рдкрд░реАрдХреНрд╖рдг / рдкреНрд░рд▓реЗрдЦрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред