{"title":"Använda Djangos autentiseringssystem","version":"5.2","locale":"sv","docname":"topics/auth/default","url":"/sv/5.2/topics/auth/default/","canonical":"https://djangodocs.dev/sv/5.2/topics/auth/default/","summary":"Detta dokument förklarar användningen av Djangos autentiseringssystem i dess standardkonfiguration.","html":"<h1>Använda Djangos autentiseringssystem<a class=\"heading-anchor\" href=\"#using-the-django-authentication-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument förklarar användningen av Djangos autentiseringssystem i dess standardkonfiguration. Denna konfiguration har utvecklats för att tjäna de vanligaste projektbehoven, hantera ett rimligt brett spektrum av uppgifter och har en noggrann implementering av lösenord och behörigheter. För projekt där autentiseringsbehoven skiljer sig från standardkonfigurationen stöder Django omfattande <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/\"><span class=\"doc\">förlängning och anpassning</span></a> av autentisering.</p>\n<p>Django Authentication tillhandahåller både autentisering och auktorisering tillsammans och kallas i allmänhet autentiseringssystemet, eftersom dessa funktioner är något kopplade.</p>\n<section id=\"user-objects\">\n<span id=\"id1\"></span><h2><code class=\"docutils literal notranslate\">User</code>-objekt<a class=\"heading-anchor\" href=\"#user-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt är kärnan i autentiseringssystemet. De representerar vanligtvis de personer som interagerar med din webbplats och används för att möjliggöra saker som att begränsa åtkomst, registrera användarprofiler, associera innehåll med skapare etc. Endast en klass av användare finns i Djangos autentiseringsramverk, dvs. <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_superuser\" title=\"django.contrib.auth.models.User.is_superuser\"><code class=\"xref py py-attr docutils literal notranslate\">'superusers'</code></a> eller admin <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_staff\" title=\"django.contrib.auth.models.User.is_staff\"><code class=\"xref py py-attr docutils literal notranslate\">'staff'</code></a> användare är bara användarobjekt med speciella attribut inställda, inte olika klasser av användarobjekt.</p>\n<p>De primära attributen för standardanvändaren är:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.username\" title=\"django.contrib.auth.models.User.username\"><code class=\"xref py py-attr docutils literal notranslate\">username</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.password\" title=\"django.contrib.auth.models.User.password\"><code class=\"xref py py-attr docutils literal notranslate\">password</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.email\" title=\"django.contrib.auth.models.User.email\"><code class=\"xref py py-attr docutils literal notranslate\">email</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.first_name\" title=\"django.contrib.auth.models.User.first_name\"><code class=\"xref py py-attr docutils literal notranslate\">first_name</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.last_name\" title=\"django.contrib.auth.models.User.last_name\"><code class=\"xref py py-attr docutils literal notranslate\">last_name</code></a></p></li>\n</ul>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">full API-dokumentation</code></a> för fullständig referens, dokumentationen som följer är mer uppgiftsorienterad.</p>\n<section id=\"creating-users\">\n<span id=\"topics-auth-creating-users\"></span><h3>Skapa användare<a class=\"heading-anchor\" href=\"#creating-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det mest direkta sättet att skapa användare är att använda den inkluderade <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user\" title=\"django.contrib.auth.models.UserManager.create_user\"><code class=\"xref py py-meth docutils literal notranslate\">create_user()</code></a> hjälpfunktionen:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>user <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>create_user<span class=\"p\">(</span><span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lennon@thebeatles.com&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;johnpassword&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># At this point, user is a User object that has already been saved</span>\n<span class=\"go\"># to the database. You can continue to change its attributes</span>\n<span class=\"go\"># if you want to change other fields.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>last_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Lennon&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Om du har Django admin installerat kan du också <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">skapa användare interaktivt</span></a>.</p>\n</section>\n<section id=\"creating-superusers\">\n<span id=\"topics-auth-creating-superusers\"></span><h3>Skapa superanvändare<a class=\"heading-anchor\" href=\"#creating-superusers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Skapa superanvändare med hjälp av kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\">createsuperuser</code></a>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py createsuperuser --username<span class=\"o\">=</span>joe --email<span class=\"o\">=</span>joe@example.com\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py createsuperuser --username=joe --email=joe@example.com\n</code></pre></div></div></div>\n<p>Du kommer att bli ombedd att ange ett lösenord. När du har angett ett skapas användaren omedelbart. Om du utelämnar alternativen <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-createsuperuser-username\"><code class=\"xref std std-option docutils literal notranslate\">--username</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-createsuperuser-email\"><code class=\"xref std std-option docutils literal notranslate\">--email</code></a> kommer du att bli tillfrågad om dessa värden.</p>\n</section>\n<section id=\"changing-passwords\">\n<h3>Byte av lösenord<a class=\"heading-anchor\" href=\"#changing-passwords\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django lagrar inte råa (klartext) lösenord i användarmodellen, utan endast en hash (se <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/passwords/\"><span class=\"doc\">dokumentation av hur lösenord hanteras</span></a> för fullständiga detaljer). På grund av detta ska du inte försöka manipulera användarens lösenordsattribut direkt. Det är därför som en hjälpfunktion används när en användare skapas.</p>\n<p>Om du vill ändra en användares lösenord har du flera alternativ:</p>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-changepassword\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py changepassword *username*</code></a> erbjuder en metod för att ändra en användares lösenord från kommandoraden. Du uppmanas att ändra lösenordet för en viss användare och du måste ange det två gånger. Om båda stämmer överens kommer det nya lösenordet att ändras omedelbart. Om du inte anger någon användare kommer kommandot att försöka ändra lösenordet för den användare vars användarnamn matchar den aktuella systemanvändaren.</p>\n<p>Du kan också ändra ett lösenord programmatiskt med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\">set_password()</code></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>u <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;john&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>u<span class=\"o\">.</span>set_password<span class=\"p\">(</span><span class=\"s2\">&quot;new password&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>u<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Om du har Django admin installerat kan du också ändra användarens lösenord på <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">autentiseringssystemets adminsidor</span></a>.</p>\n<p>Django tillhandahåller även <a class=\"reference internal\" href=\"#built-in-auth-views\"><span class=\"std std-ref\">views</span></a> och <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">forms</span></a> som kan användas för att låta användare ändra sina egna lösenord.</p>\n<p>Om du ändrar en användares lösenord loggas alla deras sessioner ut. Se <a class=\"reference internal\" href=\"#session-invalidation-on-password-change\"><span class=\"std std-ref\">Inaktivering av session vid byte av lösenord</span></a> för mer information.</p>\n</section>\n<section id=\"authenticating-users\">\n<h3>Autentisering av användare<a class=\"heading-anchor\" href=\"#authenticating-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.authenticate\">\n<span class=\"sig-name descname\">authenticate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>credentials</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.authenticate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.aauthenticate\">\n<span class=\"sig-name descname\">aauthenticate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>credentials</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.aauthenticate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">aauthenticate()</code></p>\n<p>Använd <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> för att verifiera en uppsättning autentiseringsuppgifter. Den tar referenser som nyckelordsargument, <code class=\"docutils literal notranslate\">användarnamn</code> och <code class=\"docutils literal notranslate\">lösenord</code> för standardfallet, kontrollerar dem mot varje <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">authentication backend</span></a>, och returnerar ett <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt om referensen är giltig för en backend. Om autentiseringsuppgifterna inte är giltiga för någon backend eller om en backend ger upphov till <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\">PermissionDenied</code></a>, returnerar den <code class=\"docutils literal notranslate\">None</code>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> authenticate\n\nuser <span class=\"o\">=</span> authenticate<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> password<span class=\"o\">=</span><span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> user <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n    <span class=\"c1\"># A backend authenticated the credentials</span>\n    <span class=\"o\">...</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># No backend authenticated the credentials</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">request</code> är en valfri <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> som skickas till <code class=\"docutils literal notranslate\">authenticate()</code>-metoden i autentiseringsbackends.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Detta är ett lågnivåsätt att autentisera en uppsättning referenser; det används till exempel av <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserMiddleware</code></a>. Om du inte skriver ditt eget autentiseringssystem kommer du förmodligen inte att använda detta. Om du letar efter ett sätt att logga in en användare använder du istället <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\">LoginView</code></a>.</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"permissions-and-authorization\">\n<span id=\"topic-authorization\"></span><h2>Behörigheter och auktorisering<a class=\"heading-anchor\" href=\"#permissions-and-authorization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django levereras med ett inbyggt behörighetssystem. Det ger ett sätt att tilldela behörigheter till specifika användare och grupper av användare.</p>\n<p>Den används av Django-adminsidan, men du är välkommen att använda den i din egen kod.</p>\n<p>Django-administratörsplatsen använder behörigheter enligt följande:</p>\n<ul class=\"simple\">\n<li><p>Åtkomst till visningsobjekt är begränsad till användare med behörigheten ”visa” eller ”ändra” för den typen av objekt.</p></li>\n<li><p>Tillgång till att visa formuläret ”Lägg till” och lägga till ett objekt är begränsad till användare med behörigheten ”Lägg till” för den typen av objekt.</p></li>\n<li><p>Åtkomst till att se ändringslistan, se ändringsformuläret och ändra ett objekt är begränsad till användare med behörigheten ”ändra” för den typen av objekt.</p></li>\n<li><p>Åtkomst till att ta bort ett objekt är begränsad till användare med behörigheten ”ta bort” för den typen av objekt.</p></li>\n</ul>\n<p>Behörigheter kan ställas in inte bara per objekttyp, utan också per specifik objektinstans. Genom att använda <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_view_permission\" title=\"django.contrib.admin.ModelAdmin.has_view_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_view_permission()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_add_permission\" title=\"django.contrib.admin.ModelAdmin.has_add_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_add_permission()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission\" title=\"django.contrib.admin.ModelAdmin.has_change_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_change_permission()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_delete_permission\" title=\"django.contrib.admin.ModelAdmin.has_delete_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_delete_permission()</code></a> som tillhandahålls av klassen <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> är det möjligt att anpassa behörigheter för olika objektinstanser av samma typ.</p>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt har två many-to-many-fält: <code class=\"docutils literal notranslate\">groups</code> och <code class=\"docutils literal notranslate\">user_permissions</code>. <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt kan komma åt sina relaterade objekt på samma sätt som alla andra <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/\"><span class=\"doc\">Django model</span></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>myuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>set<span class=\"p\">([</span>group_list<span class=\"p\">])</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>add<span class=\"p\">(</span>group<span class=\"p\">,</span> group<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>remove<span class=\"p\">(</span>group<span class=\"p\">,</span> group<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>clear<span class=\"p\">()</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>set<span class=\"p\">([</span>permission_list<span class=\"p\">])</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">,</span> permission<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>remove<span class=\"p\">(</span>permission<span class=\"p\">,</span> permission<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>clear<span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"default-permissions\">\n<h3>Standardbehörighet<a class=\"heading-anchor\" href=\"#default-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När <code class=\"docutils literal notranslate\">django.contrib.auth</code> är listad i din <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>-inställning, kommer den att se till att fyra standardbehörigheter - lägg till, ändra, ta bort och visa - skapas för varje Django-modell som definieras i en av dina installerade applikationer.</p>\n<p>Dessa behörigheter skapas när du kör <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a>; första gången du kör <code class=\"docutils literal notranslate\">migrate</code> efter att ha lagt till <code class=\"docutils literal notranslate\">django.contrib.auth</code> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, skapas standardbehörigheterna för alla tidigare installerade modeller, samt för alla nya modeller som installeras vid den tidpunkten. Efteråt skapas standardbehörigheter för nya modeller varje gång du kör <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a> (funktionen som skapar behörigheter är kopplad till signalen <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a>).</p>\n<p>Anta att du har en applikation med en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.app_label\" title=\"django.db.models.Options.app_label\"><code class=\"xref py py-attr docutils literal notranslate\">app_label</code></a> <code class=\"docutils literal notranslate\">foo</code> och en modell som heter <code class=\"docutils literal notranslate\">Bar</code>, för att testa för grundläggande behörigheter bör du använda:</p>\n<ul class=\"simple\">\n<li><p>add: <code class=\"docutils literal notranslate\">user.has_perm('foo.add_bar')</code></p></li>\n<li><p>ändring: <code class=\"docutils literal notranslate\">user.has_perm('foo.change_bar')</code></p></li>\n<li><p>radera: <code class=\"docutils literal notranslate\">user.has_perm('foo.delete_bar')</code></p></li>\n<li><p>vy: <code class=\"docutils literal notranslate\">user.has_perm('foo.view_bar')</code></p></li>\n</ul>\n<p>Modellen <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.Permission\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">Permission</code></a> är sällan direkt åtkomlig.</p>\n</section>\n<section id=\"groups\">\n<h3>Grupper<a class=\"heading-anchor\" href=\"#groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.Group\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.models.Group</code></a> modeller är ett generiskt sätt att kategorisera användare så att du kan tillämpa behörigheter, eller någon annan etikett, för dessa användare. En användare kan tillhöra ett obegränsat antal grupper.</p>\n<p>En användare i en grupp har automatiskt de behörigheter som gruppen har tilldelats. Om till exempel gruppen <code class=\"docutils literal notranslate\">Site editors</code> har behörigheten <code class=\"docutils literal notranslate\">can_edit_home_page</code>, kommer alla användare i den gruppen att ha den behörigheten.</p>\n<p>Utöver behörigheter är grupper ett bekvämt sätt att kategorisera användare för att ge dem en viss etikett eller utökad funktionalitet. Du kan till exempel skapa en grupp med namnet ”Special users” och skriva kod som ger dem tillgång till en del av webbplatsen som endast är tillgänglig för medlemmar eller skicka e-postmeddelanden som endast är tillgängliga för medlemmar.</p>\n</section>\n<section id=\"programmatically-creating-permissions\">\n<h3>Skapa behörigheter programmatiskt<a class=\"heading-anchor\" href=\"#programmatically-creating-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Medan <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#custom-permissions\"><span class=\"std std-ref\">custom permissions</span></a> kan definieras i en modells <code class=\"docutils literal notranslate\">Meta</code>-klass, kan du också skapa behörigheter direkt. Du kan till exempel skapa behörigheten <code class=\"docutils literal notranslate\">can_publish</code> för en <code class=\"docutils literal notranslate\">BlogPost</code>-modell i <code class=\"docutils literal notranslate\">myapp</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> BlogPost\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> Permission\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n\ncontent_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>BlogPost<span class=\"p\">)</span>\npermission <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n    codename<span class=\"o\">=</span><span class=\"s2\">&quot;can_publish&quot;</span><span class=\"p\">,</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;Can Publish Posts&quot;</span><span class=\"p\">,</span>\n    content_type<span class=\"o\">=</span>content_type<span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Behörigheten kan sedan tilldelas en <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> via dess attribut <code class=\"docutils literal notranslate\">user_permissions</code> eller till en <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.Group\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\">Group</code></a> via dess attribut <code class=\"docutils literal notranslate\">permissions</code>.</p>\n<aside class=\"admonition-proxy-models-need-their-own-content-type admonition\" role=\"note\">\n<p class=\"admonition-title\">Proxy-modeller behöver sin egen innehållstyp</p>\n<p>Om du vill skapa <a class=\"reference internal\" href=\"#proxy-models-permissions-topic\"><span class=\"std std-ref\">behörigheter för en proxymodell</span></a>, skicka <code class=\"docutils literal notranslate\">for_concrete_model=False</code> till <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\" title=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><code class=\"xref py py-meth docutils literal notranslate\">ContentTypeManager.get_for_model()</code></a> för att få rätt <code class=\"docutils literal notranslate\">ContentType</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>\n    BlogPostProxy<span class=\"p\">,</span> for_concrete_model<span class=\"o\">=</span><span class=\"kc\">False</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"permission-caching\">\n<h3>Cachelagring av behörigheter<a class=\"heading-anchor\" href=\"#permission-caching\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend\" title=\"django.contrib.auth.backends.ModelBackend\"><code class=\"xref py py-class docutils literal notranslate\">ModelBackend</code></a> cachelagrar behörigheter på användarobjektet efter första gången de behöver hämtas för en behörighetskontroll. Detta är vanligtvis bra för begäran-svar-cykeln eftersom behörigheter vanligtvis inte kontrolleras omedelbart efter att de har lagts till (i administratören, till exempel). Om du lägger till behörigheter och kontrollerar dem omedelbart efteråt, till exempel i ett test eller en vy, är den enklaste lösningen att hämta användaren på nytt från databasen. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> Permission<span class=\"p\">,</span> User\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> get_object_or_404\n\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> BlogPost\n\n\n<span class=\"k\">def</span> <span class=\"nf\">user_gains_perms</span><span class=\"p\">(</span>request<span class=\"p\">,</span> user_id<span class=\"p\">):</span>\n    user <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>User<span class=\"p\">,</span> pk<span class=\"o\">=</span>user_id<span class=\"p\">)</span>\n    <span class=\"c1\"># any permission check will cache the current set of permissions</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s2\">&quot;myapp.change_blogpost&quot;</span><span class=\"p\">)</span>\n\n    content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>BlogPost<span class=\"p\">)</span>\n    permission <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>\n        codename<span class=\"o\">=</span><span class=\"s2\">&quot;change_blogpost&quot;</span><span class=\"p\">,</span>\n        content_type<span class=\"o\">=</span>content_type<span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    user<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">)</span>\n\n    <span class=\"c1\"># Checking the cached permission set</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s2\">&quot;myapp.change_blogpost&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># False</span>\n\n    <span class=\"c1\"># Request new instance of User</span>\n    <span class=\"c1\"># Be aware that user.refresh_from_db() won&#39;t clear the cache.</span>\n    user <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>User<span class=\"p\">,</span> pk<span class=\"o\">=</span>user_id<span class=\"p\">)</span>\n\n    <span class=\"c1\"># Permission cache is repopulated from the database</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s2\">&quot;myapp.change_blogpost&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># True</span>\n\n    <span class=\"o\">...</span>\n</code></pre></div>\n</section>\n<section id=\"proxy-models\">\n<span id=\"proxy-models-permissions-topic\"></span><h3>Proxy-modeller<a class=\"heading-anchor\" href=\"#proxy-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Proxymodeller fungerar på exakt samma sätt som konkreta modeller. Behörigheter skapas med hjälp av proxymodellens egen innehållstyp. Proxymodeller ärver inte behörigheterna för den konkreta modell som de är subklass till:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        permissions <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s2\">&quot;can_eat_pizzas&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Can eat pizzas&quot;</span><span class=\"p\">)]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Student</span><span class=\"p\">(</span>Person<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        permissions <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s2\">&quot;can_deliver_pizzas&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Can deliver pizzas&quot;</span><span class=\"p\">)]</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Fetch the content type for the proxy model.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>Student<span class=\"p\">,</span> for_concrete_model<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>student_permissions <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>content_type<span class=\"o\">=</span>content_type<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span>p<span class=\"o\">.</span>codename <span class=\"k\">for</span> p <span class=\"ow\">in</span> student_permissions<span class=\"p\">]</span>\n<span class=\"go\">[&#39;add_student&#39;, &#39;change_student&#39;, &#39;delete_student&#39;, &#39;view_student&#39;,</span>\n<span class=\"go\">&#39;can_deliver_pizzas&#39;]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> permission <span class=\"ow\">in</span> student_permissions<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    user<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s2\">&quot;app.add_person&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s2\">&quot;app.can_eat_pizzas&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>has_perms<span class=\"p\">((</span><span class=\"s2\">&quot;app.add_student&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;app.can_deliver_pizzas&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"authentication-in-web-requests\">\n<span id=\"auth-web-requests\"></span><h2>Autentisering i webbförfrågningar<a class=\"heading-anchor\" href=\"#authentication-in-web-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django använder <a class=\"reference internal\" href=\"/sv/5.2/topics/http/sessions/\"><span class=\"doc\">sessions</span></a> och middleware för att koppla autentiseringssystemet till <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">request-objekt</code></a>.</p>\n<p>Dessa tillhandahåller ett <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\">request.user</code></a>-attribut och en <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.auser\" title=\"django.http.HttpRequest.auser\"><code class=\"xref py py-meth docutils literal notranslate\">request.auser</code></a> async-metod på varje begäran som representerar den aktuella användaren. Om den aktuella användaren inte har loggat in kommer detta attribut att sättas till en instans av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\">AnonymousUser</code></a>, annars kommer det att vara en instans av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>.</p>\n<p>Du kan skilja dem åt med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-attr docutils literal notranslate\">is_authenticated</code></a>, så här:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n    <span class=\"c1\"># Do something for authenticated users.</span>\n    <span class=\"o\">...</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Do something for anonymous users.</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Eller i en asynkron vy:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>user <span class=\"o\">=</span> <span class=\"k\">await</span> request<span class=\"o\">.</span>auser<span class=\"p\">()</span>\n<span class=\"k\">if</span> user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n    <span class=\"c1\"># Do something for authenticated users.</span>\n    <span class=\"o\">...</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Do something for anonymous users.</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<section id=\"how-to-log-a-user-in\">\n<span id=\"id2\"></span><h3>Så här loggar du in en användare<a class=\"heading-anchor\" href=\"#how-to-log-a-user-in\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du har en autentiserad användare som du vill koppla till den aktuella sessionen - detta görs med en <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>-funktion.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.login\">\n<span class=\"sig-name descname\">login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</em>, <em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.alogin\">\n<span class=\"sig-name descname\">alogin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</em>, <em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.alogin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">alogin()</code></p>\n<p>För att logga in en användare från en vy, använd <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>. Den tar ett <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>-objekt och ett <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt. <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a> sparar användarens ID i sessionen med hjälp av Djangos sessionsramverk.</p>\n<p>Observera att alla uppgifter som anges under den anonyma sessionen sparas i sessionen efter att en användare loggat in.</p>\n<p>Detta exempel visar hur du kan använda både <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> och <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> authenticate<span class=\"p\">,</span> login\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    username <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">]</span>\n    password <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s2\">&quot;password&quot;</span><span class=\"p\">]</span>\n    user <span class=\"o\">=</span> authenticate<span class=\"p\">(</span>request<span class=\"p\">,</span> username<span class=\"o\">=</span>username<span class=\"p\">,</span> password<span class=\"o\">=</span>password<span class=\"p\">)</span>\n    <span class=\"k\">if</span> user <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        login<span class=\"p\">(</span>request<span class=\"p\">,</span> user<span class=\"p\">)</span>\n        <span class=\"c1\"># Redirect to a success page.</span>\n        <span class=\"o\">...</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Return an &#39;invalid login&#39; error message.</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<section id=\"selecting-the-authentication-backend\">\n<h4>Välja backend för autentisering<a class=\"heading-anchor\" href=\"#selecting-the-authentication-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>När en användare loggar in sparas användarens ID och den backend som användes för autentisering i användarens session. Detta gör att samma <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">autentiseringsbackend</span></a> kan hämta användarens uppgifter vid en framtida begäran. Den autentiseringsbackend som ska sparas i sessionen väljs enligt följande:</p>\n<ol class=\"arabic simple\">\n<li><p>Använd värdet för det valfria argumentet <code class=\"docutils literal notranslate\">backend</code>, om det anges.</p></li>\n<li><p>Använd värdet på attributet <code class=\"docutils literal notranslate\">user.backend</code>, om det finns. Detta gör det möjligt att para ihop <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> och <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>: <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> sätter attributet <code class=\"docutils literal notranslate\">user.backend</code> på det användarobjekt som returneras.</p></li>\n<li><p>Använd <code class=\"docutils literal notranslate\">backend</code> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a>, om det bara finns en.</p></li>\n<li><p>I annat fall, skapa ett undantag.</p></li>\n</ol>\n<p>I fall 1 och 2 ska värdet för argumentet <code class=\"docutils literal notranslate\">backend</code> eller attributet <code class=\"docutils literal notranslate\">user.backend</code> vara en sträng med prickad importsökväg (som den som finns i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a>), inte den faktiska backendklassen.</p>\n</section>\n</section>\n<section id=\"how-to-log-a-user-out\">\n<h3>Så här loggar du ut en användare<a class=\"heading-anchor\" href=\"#how-to-log-a-user-out\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.logout\">\n<span class=\"sig-name descname\">logout</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.logout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.alogout\">\n<span class=\"sig-name descname\">alogout</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.alogout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">alogout()</code></p>\n<p>För att logga ut en användare som har loggat in via <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.login()</code></a>, använd <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.logout()</code></a> i din vy. Den tar ett <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>-objekt och har inget returvärde. Exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> logout\n\n\n<span class=\"k\">def</span> <span class=\"nf\">logout_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    logout<span class=\"p\">(</span>request<span class=\"p\">)</span>\n    <span class=\"c1\"># Redirect to a success page.</span>\n</code></pre></div>\n<p>Observera att <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">logout()</code></a> inte ger några felmeddelanden om användaren inte var inloggad.</p>\n<p>När du anropar <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">logout()</code></a> rensas sessionsdata för den aktuella begäran helt och hållet. Alla befintliga data tas bort. Detta för att förhindra att en annan person använder samma webbläsare för att logga in och få tillgång till den tidigare användarens sessionsdata. Om du vill lägga in något i sessionen som kommer att vara tillgängligt för användaren omedelbart efter utloggning, gör det <em>efter</em> anropet <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.logout()</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"limiting-access-to-logged-in-users\">\n<h3>Begränsning av åtkomst till inloggade användare<a class=\"heading-anchor\" href=\"#limiting-access-to-logged-in-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-raw-way\">\n<h4>Det råa sättet<a class=\"heading-anchor\" href=\"#the-raw-way\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Det enkla sättet att begränsa åtkomst till sidor är att kontrollera <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-attr docutils literal notranslate\">request.user.is_authenticated</code></a> och antingen omdirigera till en inloggningssida:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> redirect\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n        <span class=\"k\">return</span> redirect<span class=\"p\">(</span><span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span>settings<span class=\"o\">.</span>LOGIN_URL<span class=\"si\">}</span><span class=\"s2\">?next=</span><span class=\"si\">{</span>request<span class=\"o\">.</span>path<span class=\"si\">}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>…eller visa ett felmeddelande:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n        <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;myapp/login_error.html&quot;</span><span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n</section>\n<section id=\"the-login-required-decorator\">\n<h4>Dekoratorn <code class=\"docutils literal notranslate\">login_required</code> (inloggning krävs)<a class=\"heading-anchor\" href=\"#the-login-required-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.login_required\">\n<span class=\"sig-name descname\">login_required</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.login_required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Som en genväg kan du använda den praktiska <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a> decorator:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a> gör följande:</p>\n<ul class=\"simple\">\n<li><p>Om användaren inte är inloggad, omdirigera till <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> och ange den aktuella absoluta sökvägen i frågesträngen. Exempel: <code class=\"docutils literal notranslate\">/accounts/login/?next=/polls/3/</code>.</p></li>\n<li><p>Om användaren är inloggad körs vyn normalt. Det står vykoden fritt att anta att användaren är inloggad.</p></li>\n</ul>\n<p>Som standard lagras den sökväg som användaren ska omdirigeras till efter framgångsrik autentisering i en frågesträngsparameter som heter <code class=\"docutils literal notranslate\">&quot;next&quot;</code>. Om du föredrar att använda ett annat namn för denna parameter, <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a> tar en valfri <code class=\"docutils literal notranslate\">redirect_field_name</code> parameter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span>redirect_field_name<span class=\"o\">=</span><span class=\"s2\">&quot;my_redirect_field&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Observera att om du anger ett värde för <code class=\"docutils literal notranslate\">redirect_field_name</code> kommer du troligen att behöva anpassa din inloggningsmall också, eftersom mallens kontextvariabel som lagrar omdirigeringssökvägen kommer att använda värdet för <code class=\"docutils literal notranslate\">redirect_field_name</code> som nyckel i stället för <code class=\"docutils literal notranslate\">&quot;next&quot;</code> (standard).</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a> tar också en valfri <code class=\"docutils literal notranslate\">login_url</code> parameter. Exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span>login_url<span class=\"o\">=</span><span class=\"s2\">&quot;/accounts/login/&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Observera att om du inte anger parametern <code class=\"docutils literal notranslate\">login_url</code> måste du se till att <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> och din inloggningsvy är korrekt associerade. Använd till exempel standardinställningarna och lägg till följande rader i din URLconf:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\npath<span class=\"p\">(</span><span class=\"s2\">&quot;accounts/login/&quot;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>LoginView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n</code></pre></div>\n<p>Inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> accepterar även namn på vyfunktioner och <a class=\"reference internal\" href=\"/sv/5.2/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">named URL patterns</span></a>. Detta gör att du fritt kan ändra din inloggningsvy i din URLconf utan att behöva uppdatera inställningen.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Dekoratorn <code class=\"docutils literal notranslate\">login_required</code> kontrollerar INTE flaggan <code class=\"docutils literal notranslate\">is_active</code> på en användare, men standardinställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> avvisar inaktiva användare.</p>\n</aside>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p>Om du skriver anpassade vyer för Djangos admin (eller behöver samma behörighetskontroll som de inbyggda vyerna använder), kan du tycka att <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#django.contrib.admin.views.decorators.staff_member_required\" title=\"django.contrib.admin.views.decorators.staff_member_required\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.admin.views.decorators.staff_member_required()</code></a> dekoratorn är ett användbart alternativ till <code class=\"docutils literal notranslate\">login_required()</code>.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Stöd för inkapsling av asynkrona vyfunktioner har lagts till.</p>\n</aside>\n</section>\n<section id=\"the-loginrequiredmixin-mixin\">\n<h4>Mixin <code class=\"docutils literal notranslate\">LoginRequiredMixin</code> mixin<a class=\"heading-anchor\" href=\"#the-loginrequiredmixin-mixin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>När du använder <a class=\"reference internal\" href=\"/sv/5.2/topics/class-based-views/\"><span class=\"doc\">klassbaserade vyer</span></a> kan du uppnå samma beteende som med <code class=\"docutils literal notranslate\">login_required</code> genom att använda <code class=\"docutils literal notranslate\">LoginRequiredMixin</code>. Denna mixin bör vara längst till vänster i arvslistan.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.LoginRequiredMixin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LoginRequiredMixin</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.LoginRequiredMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Om en vy använder denna mixin kommer alla förfrågningar från icke-autentiserade användare att omdirigeras till inloggningssidan eller visa ett HTTP 403 Forbidden-fel, beroende på <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\" title=\"django.contrib.auth.mixins.AccessMixin.raise_exception\"><code class=\"xref py py-attr docutils literal notranslate\">raise_exception</code></a>-parametern.</p>\n<p>Du kan ställa in någon av parametrarna i <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\">AccessMixin</code></a> för att anpassa hanteringen av obehöriga användare:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> LoginRequiredMixin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>LoginRequiredMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    login_url <span class=\"o\">=</span> <span class=\"s2\">&quot;/login/&quot;</span>\n    redirect_field_name <span class=\"o\">=</span> <span class=\"s2\">&quot;redirect_to&quot;</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Precis som dekoratorn <code class=\"docutils literal notranslate\">login_required</code> kontrollerar denna mixin INTE flaggan <code class=\"docutils literal notranslate\">is_active</code> på en användare, men standardinställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> avvisar inaktiva användare.</p>\n</aside>\n</section>\n<section id=\"the-login-not-required-decorator\">\n<span id=\"disable-login-required-middleware-for-views\"></span><h4>Dekoratorn <code class=\"docutils literal notranslate\">login_not_required</code><a class=\"heading-anchor\" href=\"#the-login-not-required-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.1</p></aside>\n<p>När <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.LoginRequiredMiddleware\" title=\"django.contrib.auth.middleware.LoginRequiredMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">LoginRequiredMiddleware</code></a> är installerad kräver alla vyer autentisering som standard. Vissa vyer, t.ex. inloggningsvyn, kan behöva inaktivera detta beteende.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.login_not_required\">\n<span class=\"sig-name descname\">login_not_required</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.login_not_required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tillåter oautentiserade förfrågningar till denna vy när <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.LoginRequiredMiddleware\" title=\"django.contrib.auth.middleware.LoginRequiredMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">LoginRequiredMiddleware</code></a> är installerad.</p>\n</dd></dl>\n\n</section>\n<section id=\"limiting-access-to-logged-in-users-that-pass-a-test\">\n<h4>Begränsa åtkomsten till inloggade användare som klarar ett test<a class=\"heading-anchor\" href=\"#limiting-access-to-logged-in-users-that-pass-a-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du vill begränsa åtkomsten baserat på vissa behörigheter eller något annat test gör du i princip samma sak som beskrivs i föregående avsnitt.</p>\n<p>Du kan köra ditt test på <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\">request.user</code></a> i vyn direkt. Till exempel kontrollerar den här vyn att användaren har en e-postadress i den önskade domänen och om inte, omdirigeras till inloggningssidan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> redirect\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s2\">&quot;@example.com&quot;</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> redirect<span class=\"p\">(</span><span class=\"s2\">&quot;/login/?next=</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> request<span class=\"o\">.</span>path<span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.user_passes_test\">\n<span class=\"sig-name descname\">user_passes_test</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">test_func</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.user_passes_test\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Som en genväg kan du använda den praktiska dekoratorn <code class=\"docutils literal notranslate\">user_passes_test</code> som utför en omdirigering när den anropsbara returnerar <code class=\"docutils literal notranslate\">False</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> user_passes_test\n\n\n<span class=\"k\">def</span> <span class=\"nf\">email_check</span><span class=\"p\">(</span>user<span class=\"p\">):</span>\n    <span class=\"k\">return</span> user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s2\">&quot;@example.com&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span>email_check<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\">user_passes_test()</code></a> tar ett obligatoriskt argument: en anropbar som tar ett <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-objekt och returnerar <code class=\"docutils literal notranslate\">True</code> om användaren får visa sidan. Observera att <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\">user_passes_test()</code></a> inte automatiskt kontrollerar att <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> inte är anonym.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\">user_passes_test()</code></a> tar två valfria argument:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">login_url</code></dt><dd><p>Låter dig ange den URL som användare som inte klarar testet kommer att omdirigeras till. Det kan vara en inloggningssida och standardvärdet är <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> om du inte anger någon.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">omdirigering_fältnamn</code></dt><dd><p>Samma som för <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a>. Om du ställer in den på <code class=\"docutils literal notranslate\">None</code> tas den bort från webbadressen, vilket du kanske vill göra om du omdirigerar användare som inte klarar testet till en icke-inloggningssida där det inte finns någon ”nästa sida”.</p>\n</dd>\n</dl>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span>email_check<span class=\"p\">,</span> login_url<span class=\"o\">=</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Stöd för inkapsling av asynkrona vyfunktioner och användning av asynkrona testkallelser har lagts till.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UserPassesTestMixin</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>När du använder <a class=\"reference internal\" href=\"/sv/5.2/topics/class-based-views/\"><span class=\"doc\">klassbaserade vyer</span></a> kan du använda <code class=\"docutils literal notranslate\">UserPassesTestMixin</code> för att göra detta.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin.test_func\">\n<span class=\"sig-name descname\">test_func</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.test_func\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Du måste åsidosätta metoden <code class=\"docutils literal notranslate\">test_func()</code> i klassen för att tillhandahålla det test som utförs. Dessutom kan du ställa in någon av parametrarna i <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\">AccessMixin</code></a> för att anpassa hanteringen av obehöriga användare:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> UserPassesTestMixin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s2\">&quot;@example.com&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin.get_test_func\">\n<span class=\"sig-name descname\">get_test_func</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.get_test_func\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Du kan också åsidosätta metoden <code class=\"docutils literal notranslate\">get_test_func()</code> för att mixin ska använda en funktion med ett annat namn för sina kontroller (i stället för <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.test_func\" title=\"django.contrib.auth.mixins.UserPassesTestMixin.test_func\"><code class=\"xref py py-meth docutils literal notranslate\">test_func()</code></a>).</p>\n</dd></dl>\n\n<aside class=\"admonition-stacking-userpassestestmixin admonition\" role=\"note\">\n<p class=\"admonition-title\">Stapling av <code class=\"docutils literal notranslate\">UserPassesTestMixin</code></p>\n<p>På grund av det sätt som <code class=\"docutils literal notranslate\">UserPassesTestMixin</code> implementeras kan du inte stapla dem i din arvslista. Följande fungerar INTE:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">TestMixin1</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s2\">&quot;@example.com&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">TestMixin2</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>request<span class=\"o\">.</span>user<span class=\"o\">.</span>username<span class=\"o\">.</span>startswith<span class=\"p\">(</span><span class=\"s2\">&quot;django&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>TestMixin1<span class=\"p\">,</span> TestMixin2<span class=\"p\">,</span> View<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\">TestMixin1</code> skulle anropa <code class=\"docutils literal notranslate\">super()</code> och ta hänsyn till det resultatet, skulle <code class=\"docutils literal notranslate\">TestMixin1</code> inte fungera fristående längre.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"the-permission-required-decorator\">\n<h4>Dekoratorn <code class=\"docutils literal notranslate\">permission_required</code> (tillstånd krävs)<a class=\"heading-anchor\" href=\"#the-permission-required-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.permission_required\">\n<span class=\"sig-name descname\">permission_required</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">perm</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">raise_exception<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.permission_required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det är en relativt vanlig uppgift att kontrollera om en användare har en viss behörighet. Av den anledningen tillhandahåller Django en genväg för det fallet: <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\">permission_required()</code></a> decorator:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> permission_required\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.add_choice&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Precis som metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\">has_perm()</code></a>, har namn på behörigheter formen <code class=\"docutils literal notranslate\">&quot;&lt;app label&gt;.&lt;permission codename&gt;&quot;</code> (t.ex. <code class=\"docutils literal notranslate\">polls.add_choice</code> för en behörighet på en modell i applikationen <code class=\"docutils literal notranslate\">polls</code>).</p>\n<p>Dekoratorn kan också ta en iterabel av behörigheter, i vilket fall användaren måste ha alla behörigheter för att få tillgång till vyn.</p>\n<p>Observera att <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\">permission_required()</code></a> också tar en valfri <code class=\"docutils literal notranslate\">login_url</code> parameter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> permission_required\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.add_choice&quot;</span><span class=\"p\">,</span> login_url<span class=\"o\">=</span><span class=\"s2\">&quot;/loginpage/&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Precis som i <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a>-dekoratorn är <code class=\"docutils literal notranslate\">login_url</code> standardvärdet för <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>.</p>\n<p>Om parametern <code class=\"docutils literal notranslate\">raise_exception</code> anges, kommer dekoratorn att höja <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\">PermissionDenied</code></a> och uppmana :ref:` 403 (HTTP Forbidden)-vyn&lt;http_forbidden_view&gt;` istället för att omdirigera till inloggningssidan.</p>\n<p>Om du vill använda <code class=\"docutils literal notranslate\">raise_exception</code> men också ge dina användare en chans att logga in först, kan du lägga till <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\">login_required()</code></a> decorator:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required<span class=\"p\">,</span> permission_required\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.add_choice&quot;</span><span class=\"p\">,</span> raise_exception<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Detta undviker också en omdirigeringsslinga när <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\">LoginView</code></a>’s <code class=\"docutils literal notranslate\">redirect_authenticated_user=True</code> och den inloggade användaren inte har alla nödvändiga behörigheter.</p>\n</dd></dl>\n\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Stöd för inkapsling av asynkrona vyfunktioner har lagts till.</p>\n</aside>\n</section>\n<section id=\"the-permissionrequiredmixin-mixin\">\n<h4>Mixin <code class=\"docutils literal notranslate\">PermissionRequiredMixin</code> mixin<a class=\"heading-anchor\" href=\"#the-permissionrequiredmixin-mixin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att tillämpa behörighetskontroller på <a class=\"reference internal\" href=\"/sv/5.2/ref/class-based-views/\"><span class=\"doc\">klassbaserade vyer</span></a> kan du använda <code class=\"docutils literal notranslate\">PermissionRequiredMixin</code>:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PermissionRequiredMixin</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Denna mixin, precis som dekoratorn <code class=\"docutils literal notranslate\">permission_required</code>, kontrollerar om användaren som öppnar en vy har alla givna behörigheter. Du bör ange behörigheten (eller en iterabel av behörigheter) med hjälp av parametern <code class=\"docutils literal notranslate\">permission_required</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> PermissionRequiredMixin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>PermissionRequiredMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    permission_required <span class=\"o\">=</span> <span class=\"s2\">&quot;polls.add_choice&quot;</span>\n    <span class=\"c1\"># Or multiple of permissions:</span>\n    permission_required <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;polls.view_choice&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;polls.change_choice&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Du kan ställa in någon av parametrarna i <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\">AccessMixin</code></a> för att anpassa hanteringen av obehöriga användare.</p>\n<p>Du kan också åsidosätta dessa metoder:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\">\n<span class=\"sig-name descname\">get_permission_required</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en iterabel med namn på behörigheter som används av mixinen. Standard är attributet <code class=\"docutils literal notranslate\">permission_required</code>, konverterat till en tupel om det behövs.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin.has_permission\">\n<span class=\"sig-name descname\">has_permission</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.has_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en boolean som anger om den aktuella användaren har behörighet att köra den dekorerade vyn. Som standard returnerar detta resultatet av att anropa <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.has_perms\" title=\"django.contrib.auth.models.User.has_perms\"><code class=\"xref py py-meth docutils literal notranslate\">has_perms()</code></a> med listan över behörigheter som returneras av <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\" title=\"django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\"><code class=\"xref py py-meth docutils literal notranslate\">get_permission_required()</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"redirecting-unauthorized-requests-in-class-based-views\">\n<h3>Omdirigering av obehöriga förfrågningar i klassbaserade vyer<a class=\"heading-anchor\" href=\"#redirecting-unauthorized-requests-in-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att underlätta hanteringen av åtkomstbegränsningar i <a class=\"reference internal\" href=\"/sv/5.2/ref/class-based-views/\"><span class=\"doc\">klassbaserade vyer</span></a> kan <code class=\"docutils literal notranslate\">AccessMixin</code> användas för att konfigurera beteendet för en vy när åtkomst nekas. Autentiserade användare nekas åtkomst med ett HTTP 403 Forbidden-svar. Anonyma användare omdirigeras till inloggningssidan eller visas ett HTTP 403 Forbidden-svar, beroende på attributet <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\" title=\"django.contrib.auth.mixins.AccessMixin.raise_exception\"><code class=\"xref py py-attr docutils literal notranslate\">raise_exception</code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AccessMixin</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.login_url\">\n<span class=\"sig-name descname\">login_url</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.login_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardreturvärde för <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\" title=\"django.contrib.auth.mixins.AccessMixin.get_login_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_login_url()</code></a>.  Standardvärdet är <code class=\"docutils literal notranslate\">None</code> i vilket fall <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\" title=\"django.contrib.auth.mixins.AccessMixin.get_login_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_login_url()</code></a> återgår till <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.permission_denied_message\">\n<span class=\"sig-name descname\">permission_denied_message</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.permission_denied_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardavkastningsvärde för <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\" title=\"django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\"><code class=\"xref py py-meth docutils literal notranslate\">get_permission_denied_message()</code></a>. Standardvärdet är en tom sträng.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.redirect_field_name\">\n<span class=\"sig-name descname\">redirect_field_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.redirect_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardreturvärde för <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\" title=\"django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\"><code class=\"xref py py-meth docutils literal notranslate\">get_redirect_field_name()</code></a>. Standardvärdet är <code class=\"docutils literal notranslate\">&quot;next&quot;</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.raise_exception\">\n<span class=\"sig-name descname\">raise_exception</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Om detta attribut är inställt på <code class=\"docutils literal notranslate\">True</code>, kommer ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\">PermissionDenied</code></a> undantag att uppstå när villkoren inte är uppfyllda.  När <code class=\"docutils literal notranslate\">False</code> (standard) omdirigeras anonyma användare till inloggningssidan.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_login_url\">\n<span class=\"sig-name descname\">get_login_url</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar URL:en som användare som inte klarar testet kommer att omdirigeras till. Returnerar <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.login_url\" title=\"django.contrib.auth.mixins.AccessMixin.login_url\"><code class=\"xref py py-attr docutils literal notranslate\">login_url</code></a> om den är inställd, eller <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> annars.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\">\n<span class=\"sig-name descname\">get_permission_denied_message</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>När <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\" title=\"django.contrib.auth.mixins.AccessMixin.raise_exception\"><code class=\"xref py py-attr docutils literal notranslate\">raise_exception</code></a> är <code class=\"docutils literal notranslate\">True</code> kan denna metod användas för att styra det felmeddelande som skickas till felhanteraren för visning till användaren. Returnerar attributet <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.permission_denied_message\" title=\"django.contrib.auth.mixins.AccessMixin.permission_denied_message\"><code class=\"xref py py-attr docutils literal notranslate\">permission_denied_message</code></a> som standard.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\">\n<span class=\"sig-name descname\">get_redirect_field_name</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar namnet på den frågeparameter som kommer att innehålla den URL som användaren ska omdirigeras till efter en lyckad inloggning. Om du anger <code class=\"docutils literal notranslate\">None</code> kommer ingen frågeparameter att läggas till. Returnerar attributet <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.redirect_field_name\" title=\"django.contrib.auth.mixins.AccessMixin.redirect_field_name\"><code class=\"xref py py-attr docutils literal notranslate\">redirect_field_name</code></a> som standard.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.handle_no_permission\">\n<span class=\"sig-name descname\">handle_no_permission</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.handle_no_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Beroende på värdet av <code class=\"docutils literal notranslate\">raise_exception</code>, ger metoden antingen upphov till ett <code class=\"xref py py-exc docutils literal notranslate\">PermissionDenied`</code> undantag eller omdirigerar användaren till <code class=\"docutils literal notranslate\">login_url</code>, eventuellt inklusive <code class=\"docutils literal notranslate\">redirect_field_name</code> om det är inställt.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"session-invalidation-on-password-change\">\n<span id=\"id3\"></span><h4>Inaktivering av session vid byte av lösenord<a class=\"heading-anchor\" href=\"#session-invalidation-on-password-change\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om din <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\">AUTH_USER_MODEL</code></a> ärver från <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\">AbstractBaseUser</code></a> eller implementerar sin egen <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\" title=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\"><code class=\"xref py py-meth docutils literal notranslate\">get_session_auth_hash()</code></a>-metod, kommer autentiserade sessioner att innehålla den hash som returneras av denna funktion. I fallet <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\">AbstractBaseUser</code></a> är detta en HMAC av lösenordsfältet. Django verifierar att hashen i sessionen för varje begäran matchar den som beräknas under begäran. Detta gör det möjligt för en användare att logga ut alla sina sessioner genom att ändra sitt lösenord.</p>\n<p>Standardvyerna för lösenordsändring som ingår i Django, <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordChangeView\" title=\"django.contrib.auth.views.PasswordChangeView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordChangeView</code></a> och vyn <code class=\"docutils literal notranslate\">user_change_password</code> i <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</code></a> admin, uppdaterar sessionen med den nya lösenordshashen så att en användare som ändrar sitt eget lösenord inte loggar ut sig själv. Om du har en anpassad vy för lösenordsändring och vill ha ett liknande beteende, använd funktionen <a class=\"reference internal\" href=\"#django.contrib.auth.update_session_auth_hash\" title=\"django.contrib.auth.update_session_auth_hash\"><code class=\"xref py py-func docutils literal notranslate\">update_session_auth_hash()</code></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.update_session_auth_hash\">\n<span class=\"sig-name descname\">update_session_auth_hash</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.update_session_auth_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.aupdate_session_auth_hash\">\n<span class=\"sig-name descname\">aupdate_session_auth_hash</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.aupdate_session_auth_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">aupdate_session_auth_hash()</code></p>\n<p>Denna funktion tar den aktuella begäran och det uppdaterade användarobjektet från vilket den nya sessionshashningen kommer att härledas och uppdaterar sessionshashningen på lämpligt sätt. Den roterar också sessionsnyckeln så att en stulen sessionskaka ogiltigförklaras.</p>\n<p>Exempel på användning:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> update_session_auth_hash\n\n\n<span class=\"k\">def</span> <span class=\"nf\">password_change</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        form <span class=\"o\">=</span> PasswordChangeForm<span class=\"p\">(</span>user<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">,</span> data<span class=\"o\">=</span>request<span class=\"o\">.</span>POST<span class=\"p\">)</span>\n        <span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            form<span class=\"o\">.</span>save<span class=\"p\">()</span>\n            update_session_auth_hash<span class=\"p\">(</span>request<span class=\"p\">,</span> form<span class=\"o\">.</span>user<span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Eftersom <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\" title=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\"><code class=\"xref py py-meth docutils literal notranslate\">get_session_auth_hash()</code></a> baseras på <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\">SECRET_KEY</code></a>, måste hemliga nyckelvärden roteras för att undvika att befintliga sessioner ogiltigförklaras när du uppdaterar din webbplats för att använda en ny hemlighet. Se <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\">SECRET_KEY_FALLBACKS</code></a> för mer information.</p>\n</aside>\n</section>\n</section>\n<section id=\"module-django.contrib.auth.views\">\n<span id=\"authentication-views\"></span><span id=\"built-in-auth-views\"></span><h3>Autentiseringsvyer<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django tillhandahåller flera vyer som du kan använda för att hantera inloggning, utloggning och lösenordshantering. Dessa använder <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">stock auth forms</span></a> men du kan också skicka in dina egna formulär.</p>\n<p>Django tillhandahåller ingen standardmall för autentiseringsvyerna. Du bör skapa dina egna mallar för de vyer du vill använda. Mallkontexten är dokumenterad i varje vy, se <a class=\"reference internal\" href=\"#all-authentication-views\"><span class=\"std std-ref\">Alla autentiseringsvyer</span></a>.</p>\n<section id=\"using-the-views\">\n<span id=\"id4\"></span><h4>Använda vyerna<a class=\"heading-anchor\" href=\"#using-the-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Det finns olika metoder för att implementera dessa vyer i ditt projekt. Det enklaste sättet är att inkludera den tillhandahållna URLconf i <code class=\"docutils literal notranslate\">django.contrib.auth.urls</code> i din egen URLconf, till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;accounts/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;django.contrib.auth.urls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta kommer att omfatta följande URL-mönster:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>accounts/login/ [name=&#39;login&#39;]\naccounts/logout/ [name=&#39;logout&#39;]\naccounts/password_change/ [name=&#39;password_change&#39;]\naccounts/password_change/done/ [name=&#39;password_change_done&#39;]\naccounts/password_reset/ [name=&#39;password_reset&#39;]\naccounts/password_reset/done/ [name=&#39;password_reset_done&#39;]\naccounts/reset/&lt;uidb64&gt;/&lt;token&gt;/ [name=&#39;password_reset_confirm&#39;]\naccounts/reset/done/ [name=&#39;password_reset_complete&#39;]\n</code></pre></div>\n<p>Vyerna ger ett URL-namn för enklare referens. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/http/urls/\"><span class=\"doc\">URL-dokumentationen</span></a> för information om hur du använder namngivna URL-mönster.</p>\n<p>Om du vill ha mer kontroll över dina webbadresser kan du referera till en specifik vy i din URLconf:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;change-password/&quot;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>PasswordChangeView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Vyerna har valfria argument som du kan använda för att ändra vyns beteende. Om du t.ex. vill ändra mallnamnet som en vy använder kan du ange argumentet <code class=\"docutils literal notranslate\">template_name</code>. Ett sätt att göra detta är att ange nyckelordsargument i URLconf, dessa kommer att vidarebefordras till vyn. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span>\n        <span class=\"s2\">&quot;change-password/&quot;</span><span class=\"p\">,</span>\n        auth_views<span class=\"o\">.</span>PasswordChangeView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>template_name<span class=\"o\">=</span><span class=\"s2\">&quot;change-password.html&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Alla vyer är <a class=\"reference internal\" href=\"/sv/5.2/topics/class-based-views/\"><span class=\"doc\">klassbaserade</span></a>, vilket gör att du enkelt kan anpassa dem genom subklassning.</p>\n</section>\n<section id=\"all-authentication-views\">\n<span id=\"id5\"></span><h4>Alla autentiseringsvyer<a class=\"heading-anchor\" href=\"#all-authentication-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Detta är en lista med alla vyer som <code class=\"docutils literal notranslate\">django.contrib.auth</code> tillhandahåller. För implementationsdetaljer se <a class=\"reference internal\" href=\"#using-the-views\"><span class=\"std std-ref\">Använda vyerna</span></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LoginView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">login</code></p>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/topics/http/urls/\"><span class=\"doc\">URL-dokumentationen</span></a> för mer information om hur du använder namngivna URL-mönster.</p>\n<p><strong>Metoder och egenskaper</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på en mall som ska visas för den vy som används för att logga in användaren. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/login.html</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.next_page\">\n<span class=\"sig-name descname\">next_page</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.next_page\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den URL som ska omdirigeras till efter inloggning. Standardvärde är <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">LOGIN_REDIRECT_URL</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.redirect_field_name\">\n<span class=\"sig-name descname\">redirect_field_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.redirect_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på ett <code class=\"docutils literal notranslate\">GET</code>-fält som innehåller den URL som ska omdirigeras till efter inloggning. Standard är <code class=\"docutils literal notranslate\">next</code>. Åsidosätter <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView.get_default_redirect_url\" title=\"django.contrib.auth.views.LoginView.get_default_redirect_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_default_redirect_url()</code></a> URL om den angivna <code class=\"docutils literal notranslate\">GET</code> parametern skickas.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.authentication_form\">\n<span class=\"sig-name descname\">authentication_form</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.authentication_form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En anropsbar (vanligtvis en formulärklass) som ska användas för autentisering. Standardinställning är <a class=\"reference internal\" href=\"#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\">AuthenticationForm</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.redirect_authenticated_user\">\n<span class=\"sig-name descname\">redirect_authenticated_user</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.redirect_authenticated_user\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett boolean som styr om autentiserade användare som öppnar inloggningssidan ska omdirigeras som om de precis hade loggat in. Standardvärdet är <code class=\"docutils literal notranslate\">False</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Om du aktiverar <code class=\"docutils literal notranslate\">redirect_authenticated_user</code> kommer andra webbplatser att kunna avgöra om deras besökare är autentiserade på din webbplats genom att begära omdirigeringsadresser till bildfiler på din webbplats. För att undvika detta ”<a class=\"reference external\" href=\"https://robinlinus.github.io/socialmedia-leak/\">social media fingerprinting</a>” informationsläckage, hosta alla bilder och din favicon på en separat domän.</p>\n<p>Om du aktiverar <code class=\"docutils literal notranslate\">redirect_authenticated_user</code> kan det också resultera i en omdirigeringsloop när du använder <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\">permission_required()</code></a>-dekoratorn om inte parametern <code class=\"docutils literal notranslate\">raise_exception</code> används.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.success_url_allowed_hosts\">\n<span class=\"sig-name descname\">success_url_allowed_hosts</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.success_url_allowed_hosts\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En <code class=\"xref py py-class docutils literal notranslate\">uppsättning</code> av värdar, utöver <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">request.get_host()</code></a>, som är säkra för omdirigering efter inloggning. Standardvärdet är en tom <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView.get_default_redirect_url\">\n<span class=\"sig-name descname\">get_default_redirect_url</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView.get_default_redirect_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar den URL som ska omdirigeras till efter inloggning. Standardimplementeringen löser och returnerar <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView.next_page\" title=\"django.contrib.auth.views.LoginView.next_page\"><code class=\"xref py py-attr docutils literal notranslate\">next_page</code></a> om den är inställd, eller <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">LOGIN_REDIRECT_URL</code></a> annars.</p>\n</dd></dl>\n\n<p>Här är vad <code class=\"docutils literal notranslate\">LoginView</code> gör:</p>\n<ul class=\"simple\">\n<li><p>Om den anropas via <code class=\"docutils literal notranslate\">GET</code> visar den ett inloggningsformulär som POSTAS till samma URL. Mer om detta om en liten stund.</p></li>\n<li><p>Om den anropas via <code class=\"docutils literal notranslate\">POST</code> med inloggningsuppgifter från användaren försöker den logga in användaren. Om inloggningen lyckas omdirigeras vyn till den URL som anges i <code class=\"docutils literal notranslate\">next</code>. Om <code class=\"docutils literal notranslate\">next</code> inte anges, omdirigeras den till <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_REDIRECT_URL</code></a> (som standard till <code class=\"docutils literal notranslate\">/accounts/profile/</code>). Om inloggningen inte lyckas visas inloggningsformuläret på nytt.</p></li>\n</ul>\n<p>Det är ditt ansvar att tillhandahålla html för inloggningsmallen, som heter <code class=\"docutils literal notranslate\">registration/login.html</code> som standard. Den här mallen får fyra mallkontextvariabler:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">form</code>: Ett <a class=\"reference internal\" href=\"/sv/5.2/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a>-objekt som representerar <a class=\"reference internal\" href=\"#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\">AuthenticationForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">nästa</code>: Den URL som ska omdirigeras till efter en lyckad inloggning. Den kan också innehålla en frågesträng.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site</code>: Den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\">Site</code></a>, enligt inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\">SITE_ID</code></a>. Om du inte har installerat webbplatsramverket kommer detta att ställas in till en instans av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\">RequestSite</code></a>, som härleder webbplatsnamnet och domänen från den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Ett alias för <code class=\"docutils literal notranslate\">site.name</code>. Om du inte har installerat site-ramverket kommer detta att ställas in till värdet av <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. För mer information om webbplatser, se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/\"><span class=\"doc\">Ramverket för ”webbplatser”</span></a>.</p></li>\n</ul>\n<p>Om du föredrar att inte anropa mallen <code class=\"file docutils literal notranslate\">registration/login.html</code> kan du skicka parametern <code class=\"docutils literal notranslate\">template_name</code> via de extra argumenten till metoden <code class=\"docutils literal notranslate\">as_view</code> i din URLconf. Till exempel skulle denna URLconf-rad använda <code class=\"file docutils literal notranslate\">myapp/login.html</code> istället:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>path<span class=\"p\">(</span><span class=\"s2\">&quot;accounts/login/&quot;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>LoginView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>template_name<span class=\"o\">=</span><span class=\"s2\">&quot;myapp/login.html&quot;</span><span class=\"p\">)),</span>\n</code></pre></div>\n<p>Du kan också ange namnet på fältet <code class=\"docutils literal notranslate\">GET</code> som innehåller den URL som ska omdirigeras till efter inloggning med hjälp av <code class=\"docutils literal notranslate\">redirect_field_name</code>. Som standard kallas fältet <code class=\"docutils literal notranslate\">next</code>.</p>\n<p>Här är ett exempel på en mall för <code class=\"file docutils literal notranslate\">registration/login.html</code> som du kan använda som utgångspunkt. Det förutsätter att du har en <code class=\"file docutils literal notranslate\">base.html</code>-mall som definierar ett <code class=\"docutils literal notranslate\">content</code>-block:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">form.errors</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Your username and password didn&#39;t match. Please try again.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">next</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">user.is_authenticated</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Your account doesn&#39;t have access to this page. To proceed,\n    please login with an account that has access.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Please login to see this page.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;login&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">table</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.username.label_tag</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.username</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.password.label_tag</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.password</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">table</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;login&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;hidden&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;next&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">next</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n\n<span class=\"c\">{# Assumes you set up the password_reset view in your URLconf #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;password_reset&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Lost password?<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Om du har anpassat autentiseringen (se <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/\"><span class=\"doc\">Customizing Authentication</span></a>) kan du använda ett anpassat autentiseringsformulär genom att ange attributet <code class=\"docutils literal notranslate\">authentication_form</code>. Detta formulär måste acceptera ett argument med nyckelordet <code class=\"docutils literal notranslate\">request</code> i sin metod <code class=\"docutils literal notranslate\">__init__()</code> och tillhandahålla en metod <code class=\"docutils literal notranslate\">get_user()</code> som returnerar det autentiserade användarobjektet (denna metod anropas endast efter en lyckad formulärvalidering).</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LogoutView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Loggar ut en användare på <code class=\"docutils literal notranslate\">POST</code>-förfrågningar.</p>\n<p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">logout</code></p>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView.next_page\">\n<span class=\"sig-name descname\">next_page</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView.next_page\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den URL som ska omdirigeras till efter utloggning. Standardvärde är <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGOUT_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">LOGOUT_REDIRECT_URL</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska visas efter att användaren har loggat ut. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/logged_out.html</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView.redirect_field_name\">\n<span class=\"sig-name descname\">redirect_field_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView.redirect_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på ett <code class=\"docutils literal notranslate\">GET</code>-fält som innehåller den URL som ska omdirigeras till efter utloggning. Standard är <code class=\"docutils literal notranslate\">'next'</code>. Åsidosätter <a class=\"reference internal\" href=\"#django.contrib.auth.views.LogoutView.next_page\" title=\"django.contrib.auth.views.LogoutView.next_page\"><code class=\"xref py py-attr docutils literal notranslate\">next_page</code></a> URL om den angivna <code class=\"docutils literal notranslate\">GET</code> parametern skickas.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView.success_url_allowed_hosts\">\n<span class=\"sig-name descname\">success_url_allowed_hosts</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView.success_url_allowed_hosts\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En <code class=\"xref py py-class docutils literal notranslate\">uppsättning</code> av värdar, utöver <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">request.get_host()</code></a>, som är säkra för omdirigering efter utloggning. Standardvärdet är en tom <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a>.</p>\n</dd></dl>\n\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">title</code>: Strängen ”Logged out”, lokaliserad.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site</code>: Den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\">Site</code></a>, enligt inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\">SITE_ID</code></a>. Om du inte har installerat webbplatsramverket kommer detta att ställas in till en instans av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\">RequestSite</code></a>, som härleder webbplatsnamnet och domänen från den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Ett alias för <code class=\"docutils literal notranslate\">site.name</code>. Om du inte har installerat site-ramverket kommer detta att ställas in till värdet av <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. För mer information om webbplatser, se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/\"><span class=\"doc\">Ramverket för ”webbplatser”</span></a>.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.logout_then_login\">\n<span class=\"sig-name descname\">logout_then_login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.logout_then_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Loggar ut en användare på <code class=\"docutils literal notranslate\">POST</code>-förfrågningar och omdirigerar sedan till inloggningssidan.</p>\n<p><strong>URL-namn:</strong> Ingen standard-URL angiven</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Valfria argument: **</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">login_url</code>: URL-adressen till inloggningssidan som du ska omdirigeras till. Standardvärdet är <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> om det inte anges.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordChangeView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_change</code></p>\n<p>Tillåter en användare att ändra sitt lösenord.</p>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas för att visa formuläret för lösenordsändring. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_change_form.html</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView.success_url\">\n<span class=\"sig-name descname\">success_url</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView.success_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den URL som ska omdirigeras till efter en lyckad lösenordsändring. Standard är <code class=\"docutils literal notranslate\">'password_change_done</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView.form_class\">\n<span class=\"sig-name descname\">form_class</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView.form_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett anpassat formulär för ”byte av lösenord” som måste acceptera ett argument i form av nyckelordet <code class=\"docutils literal notranslate\">user</code>. Formuläret är ansvarigt för att faktiskt ändra användarens lösenord. Standardinställning är <a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordChangeForm\" title=\"django.contrib.auth.forms.PasswordChangeForm\"><code class=\"xref py py-class docutils literal notranslate\">PasswordChangeForm</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">formulär</code>: Formuläret för lösenordsändring (se <code class=\"docutils literal notranslate\">form_class</code> ovan).</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeDoneView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordChangeDoneView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeDoneView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_change_done</code></p>\n<p>Den sida som visas efter att en användare har bytt lösenord.</p>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeDoneView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeDoneView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_change_done.html</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeDoneView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeDoneView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_reset</code></p>\n<p>Gör det möjligt för en användare att återställa sitt lösenord genom att generera en engångslänk som kan användas för att återställa lösenordet och skicka länken till användarens registrerade e-postadress.</p>\n<p>Den här vyn skickar ett e-postmeddelande om följande villkor är uppfyllda:</p>\n<ul class=\"simple\">\n<li><p>Den angivna e-postadressen finns i systemet.</p></li>\n<li><p>Den begärda användaren är aktiv (<code class=\"docutils literal notranslate\">User.is_active</code> är <code class=\"docutils literal notranslate\">True</code>).</p></li>\n<li><p>Den begärda användaren har ett användbart lösenord. Användare som flaggas med ett oanvändbart lösenord (se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_unusable_password\" title=\"django.contrib.auth.models.User.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\">set_unusable_password()</code></a>) får inte begära en återställning av lösenordet för att förhindra missbruk vid användning av en extern autentiseringskälla som LDAP.</p></li>\n</ul>\n<p>Om något av dessa villkor <em>inte</em> är uppfyllt skickas inget e-postmeddelande, men användaren får inte heller något felmeddelande. Detta förhindrar att information läcker ut till potentiella angripare. Om du vill tillhandahålla ett felmeddelande i det här fallet kan du underordna dig <a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetForm</code></a> och använda attributet <code class=\"docutils literal notranslate\">form_class</code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Tänk på att det tar extra tid att skicka ett e-postmeddelande och att du därför kan utsättas för en tidsattack med uppräkning av e-postadresser på grund av skillnaden mellan varaktigheten för en återställningsbegäran för en befintlig e-postadress och varaktigheten för en återställningsbegäran för en icke-existerande e-postadress. För att minska omkostnaderna kan du använda ett tredjepartspaket som gör det möjligt att skicka e-postmeddelanden asynkront, t.ex. <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-mailer/\">django-mailer</a>.</p>\n</aside>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas för att visa formuläret för återställning av lösenord. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_form.html</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.form_class\">\n<span class=\"sig-name descname\">form_class</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.form_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Formulär som kommer att användas för att få e-postadressen till den användare som lösenordet ska återställas för. Standardinställning är <a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetForm</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.email_template_name\">\n<span class=\"sig-name descname\">email_template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.email_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas för att generera e-postmeddelandet med länken för återställning av lösenord. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_email.html</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.subject_template_name\">\n<span class=\"sig-name descname\">subject_template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.subject_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas för ämnet i e-postmeddelandet med länken för återställning av lösenord. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_subject.txt</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.token_generator\">\n<span class=\"sig-name descname\">token_generator</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.token_generator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Instans av klassen för att kontrollera engångslänken. Detta kommer som standard att vara <code class=\"docutils literal notranslate\">default_token_generator</code>, det är en instans av <code class=\"docutils literal notranslate\">django.contrib.auth.tokens.PasswordResetTokenGenerator</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.success_url\">\n<span class=\"sig-name descname\">success_url</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.success_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den URL som ska omdirigeras till efter en lyckad begäran om återställning av lösenord. Standardvärdet är <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>’password_reset_done’’.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.from_email\">\n<span class=\"sig-name descname\">from_email</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.from_email\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En giltig e-postadress. Som standard använder Django <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.html_email_template_name\">\n<span class=\"sig-name descname\">html_email_template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.html_email_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas för att generera ett <em class=\"mimetype\">text/html</em> flerdelat e-postmeddelande med länken för återställning av lösenord. Som standard skickas inte HTML-e-post.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView.extra_email_context\">\n<span class=\"sig-name descname\">extra_email_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView.extra_email_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som kommer att finnas tillgänglig i e-postmallen. Den kan användas för att åsidosätta standardvärden för mallkontext som anges nedan, t.ex. <code class=\"docutils literal notranslate\">domain</code>.</p>\n</dd></dl>\n\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">formulär</code>: Formuläret (se <code class=\"docutils literal notranslate\">form_class</code> ovan) för återställning av användarens lösenord.</p></li>\n</ul>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>E-postmallens sammanhang: **</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">email</code>: Ett alias för <code class=\"docutils literal notranslate\">user.email</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">user</code>: Den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>, enligt formulärfältet <code class=\"docutils literal notranslate\">email</code>. Endast aktiva användare kan återställa sina lösenord (<code class=\"docutils literal notranslate\">User.is_active is True</code>).</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Ett alias för <code class=\"docutils literal notranslate\">site.name</code>. Om du inte har installerat site-ramverket kommer detta att ställas in till värdet av <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. För mer information om webbplatser, se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/sites/\"><span class=\"doc\">Ramverket för ”webbplatser”</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">domän</code>: Ett alias för <code class=\"docutils literal notranslate\">site.domain</code>. Om du inte har installerat site-ramverket kommer detta att sättas till värdet av <code class=\"docutils literal notranslate\">request.get_host()</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">protokoll</code>: http eller https</p></li>\n<li><p><code class=\"docutils literal notranslate\">uid</code>: Användarens primärnyckel kodad i bas 64.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token</code>: Token för att kontrollera att återställningslänken är giltig.</p></li>\n</ul>\n<p>Exempel på <code class=\"docutils literal notranslate\">registration/password_reset_email.html</code> (mall för e-postens brödtext):</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>Someone asked for password reset for email <span class=\"cp\">{{</span> <span class=\"nv\">email</span> <span class=\"cp\">}}</span>. Follow the link below:\n<span class=\"cp\">{{</span> <span class=\"nv\">protocol</span><span class=\"cp\">}}</span>://<span class=\"cp\">{{</span> <span class=\"nv\">domain</span> <span class=\"cp\">}}{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;password_reset_confirm&#39;</span> <span class=\"nv\">uidb64</span><span class=\"o\">=</span><span class=\"nv\">uid</span> <span class=\"nv\">token</span><span class=\"o\">=</span><span class=\"nv\">token</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Samma mallkontext används för ämnesmallen. Ämnet måste vara en vanlig textsträng på en rad.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetDoneView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetDoneView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetDoneView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_reset_done</code></p>\n<p>Den sida som visas efter att en användare har fått en länk för att återställa sitt lösenord via e-post. Denna vy anropas som standard om <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetView\" title=\"django.contrib.auth.views.PasswordResetView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetView</code></a> inte har en explicit <code class=\"docutils literal notranslate\">uccess_url</code> URL inställd.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Om den angivna e-postadressen inte finns i systemet, användaren är inaktiv eller har ett oanvändbart lösenord, kommer användaren fortfarande att omdirigeras till den här vyn men inget e-postmeddelande kommer att skickas.</p>\n</aside>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetDoneView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetDoneView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska användas. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_done.html</code> om det inte anges.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetDoneView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetDoneView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetConfirmView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_reset_confirm</code></p>\n<p>Visar ett formulär för att ange ett nytt lösenord.</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Nyckelordsargument från webbadressen: **</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">uidb64</code>: Användarens id kodat i bas 64.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token</code>: Token för att kontrollera att lösenordet är giltigt.</p></li>\n</ul>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall som ska visa vyn för bekräftelse av lösenord. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_confirm.html</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.token_generator\">\n<span class=\"sig-name descname\">token_generator</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.token_generator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Instans av klassen för att kontrollera lösenordet. Detta kommer som standard att vara <code class=\"docutils literal notranslate\">default_token_generator</code>, det är en instans av <code class=\"docutils literal notranslate\">django.contrib.auth.tokens.PasswordResetTokenGenerator</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.post_reset_login\">\n<span class=\"sig-name descname\">post_reset_login</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.post_reset_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En boolean som anger om användaren ska autentiseras automatiskt efter en lyckad återställning av lösenordet. Standardvärdet är <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.post_reset_login_backend\">\n<span class=\"sig-name descname\">post_reset_login_backend</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.post_reset_login_backend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En prickad sökväg till den autentiseringsbackend som ska användas när en användare autentiseras om <code class=\"docutils literal notranslate\">post_reset_login</code> är <code class=\"docutils literal notranslate\">True</code>. Krävs endast om du har flera <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> konfigurerade. Standardvärdet är <code class=\"docutils literal notranslate\">None</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.form_class\">\n<span class=\"sig-name descname\">form_class</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.form_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Formulär som kommer att användas för att ställa in lösenordet. Standard är <a class=\"reference internal\" href=\"#django.contrib.auth.forms.SetPasswordForm\" title=\"django.contrib.auth.forms.SetPasswordForm\"><code class=\"xref py py-class docutils literal notranslate\">SetPasswordForm</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.success_url\">\n<span class=\"sig-name descname\">success_url</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.success_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>URL att omdirigera efter att lösenordsåterställningen är klar. Standardvärdet är <code class=\"docutils literal notranslate\">'password_reset_complete'</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView.reset_url_token\">\n<span class=\"sig-name descname\">reset_url_token</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView.reset_url_token\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tokenparameter som visas som en komponent i URL:er för återställning av lösenord. Standardvärdet är ”set-password”.</p>\n</dd></dl>\n\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">formulär</code>: Formuläret (se <code class=\"docutils literal notranslate\">form_class</code> ovan) för att ange den nya användarens lösenord.</p></li>\n<li><p><code class=\"docutils literal notranslate\">validlink</code>: Boolean, True om länken (kombination av <code class=\"docutils literal notranslate\">uidb64</code> och <code class=\"docutils literal notranslate\">token</code>) är giltig eller oanvänd ännu.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetCompleteView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetCompleteView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetCompleteView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Namn på webbadress:</strong> <code class=\"docutils literal notranslate\">password_reset_complete</code></p>\n<p>Visar en vy som informerar användaren om att lösenordet har ändrats.</p>\n<p><strong>Attribut:</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetCompleteView.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetCompleteView.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det fullständiga namnet på en mall för att visa vyn. Standardvärdet är <code class=\"file docutils literal notranslate\">registration/password_reset_complete.html</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetCompleteView.extra_context\">\n<span class=\"sig-name descname\">extra_context</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetCompleteView.extra_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En ordbok med kontextdata som läggs till i de standardkontextdata som skickas till mallen.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"helper-functions\">\n<h3>Hjälpfunktioner<a class=\"heading-anchor\" href=\"#helper-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.redirect_to_login\">\n<span class=\"sig-name descname\">redirect_to_login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">next</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.redirect_to_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Omdirigerar till inloggningssidan och sedan tillbaka till en annan URL efter en lyckad inloggning.</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Nödvändiga argument: **</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">nästa</code>: Den URL som ska omdirigeras till efter en lyckad inloggning.</p></li>\n</ul>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Valfria argument: **</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">login_url</code>: URL-adressen till inloggningssidan som du ska omdirigeras till. Standardvärdet är <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> om det inte anges.</p></li>\n<li><p>namn på fältet <code class=\"docutils literal notranslate\">redirect_field_name</code>: Namnet på ett <code class=\"docutils literal notranslate\">GET</code>-fält som innehåller den URL som ska omdirigeras till efter inloggning. Åsidosätter <code class=\"docutils literal notranslate\">next</code> om den angivna <code class=\"docutils literal notranslate\">GET</code>-parametern skickas.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"module-django.contrib.auth.forms\">\n<span id=\"built-in-forms\"></span><span id=\"built-in-auth-forms\"></span><h3>Inbyggda formulär<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du inte vill använda de inbyggda vyerna, men vill ha bekvämligheten med att inte behöva skriva formulär för den här funktionaliteten, tillhandahåller autentiseringssystemet flera inbyggda formulär som finns i <a class=\"reference internal\" href=\"#module-django.contrib.auth.forms\" title=\"django.contrib.auth.forms\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth.forms</code></a>:</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>De inbyggda autentiseringsformulären gör vissa antaganden om den användarmodell som de arbetar med. Om du använder en <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">anpassad användarmodell</span></a> kan det vara nödvändigt att definiera egna formulär för autentiseringssystemet. Mer information finns i dokumentationen om <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms\"><span class=\"std std-ref\">använda de inbyggda autentiseringsformulären med anpassade användarmodeller</span></a>.</p>\n</aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AdminPasswordChangeForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AdminPasswordChangeForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AdminPasswordChangeForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär som används i admin-gränssnittet för att ändra en användares lösenord, inklusive möjligheten att ange ett <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_unusable_password\" title=\"django.contrib.auth.models.User.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\">unusable password</code></a>, som blockerar användaren från att logga in med lösenordsbaserad autentisering.</p>\n<p>Tar <code class=\"docutils literal notranslate\">användaren</code> som det första positionella argumentet.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Alternativ för att inaktivera (eller återaktivera) lösenordsbaserad autentisering har lagts till.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AdminUserCreationForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AdminUserCreationForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AdminUserCreationForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.1.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.1.1</p></aside>\n<p>Ett formulär som används i admin-gränssnittet för att skapa en ny användare. Ärver från <a class=\"reference internal\" href=\"#django.contrib.auth.forms.UserCreationForm\" title=\"django.contrib.auth.forms.UserCreationForm\"><code class=\"xref py py-class docutils literal notranslate\">UserCreationForm</code></a>.</p>\n<p>Den innehåller ett extra fält <code class=\"docutils literal notranslate\">usable_password</code> som är aktiverat som standard. Om <code class=\"docutils literal notranslate\">usable_password</code> är aktiverat verifierar den att <code class=\"docutils literal notranslate\">password1</code> och <code class=\"docutils literal notranslate\">password2</code> inte är tomma och matchar, validerar lösenordet med <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/passwords/#django.contrib.auth.password_validation.validate_password\" title=\"django.contrib.auth.password_validation.validate_password\"><code class=\"xref py py-func docutils literal notranslate\">validate_password()</code></a>, och ställer in användarens lösenord med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\">set_password()</code></a>. Om <code class=\"docutils literal notranslate\">usable_password</code> är inaktiverat görs ingen lösenordsvalidering och lösenordsbaserad autentisering inaktiveras för användaren genom att anropa <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_unusable_password\" title=\"django.contrib.auth.models.User.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\">set_unusable_password()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AuthenticationForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AuthenticationForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AuthenticationForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär för att logga in en användare.</p>\n<p>Tar <code class=\"docutils literal notranslate\">request</code> som sitt första positionella argument, som lagras i formulärinstansen för att användas av underklasser.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed\">\n<span class=\"sig-name descname\">confirm_login_allowed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">user</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Som standard avvisar <code class=\"docutils literal notranslate\">AuthenticationForm</code> användare vars flagga <code class=\"docutils literal notranslate\">is_active</code> är inställd på <code class=\"docutils literal notranslate\">False</code>. Du kan åsidosätta detta beteende med en anpassad policy för att avgöra vilka användare som kan logga in. Gör detta med ett anpassat formulär som underklassar <code class=\"docutils literal notranslate\">AuthenticationForm</code> och åsidosätter metoden <code class=\"docutils literal notranslate\">confirm_login_allowed()</code>. Denna metod bör ge upphov till ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> om den angivna användaren inte kan logga in.</p>\n<p>Till exempel, för att tillåta alla användare att logga in oavsett ”aktiv” status:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.forms</span> <span class=\"kn\">import</span> AuthenticationForm\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthenticationFormWithInactiveUsersOkay</span><span class=\"p\">(</span>AuthenticationForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> user<span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<p>(I det här fallet måste du också använda en autentiseringsbackend som tillåter inaktiva användare, till exempel <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersModelBackend\" title=\"django.contrib.auth.backends.AllowAllUsersModelBackend\"><code class=\"xref py py-class docutils literal notranslate\">AllowAllUsersModelBackend</code></a>)</p>\n<p>Eller för att bara tillåta vissa aktiva användare att logga in:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PickyAuthenticationForm</span><span class=\"p\">(</span>AuthenticationForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> user<span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> user<span class=\"o\">.</span>is_active<span class=\"p\">:</span>\n            <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                _<span class=\"p\">(</span><span class=\"s2\">&quot;This account is inactive.&quot;</span><span class=\"p\">),</span>\n                code<span class=\"o\">=</span><span class=\"s2\">&quot;inactive&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">if</span> user<span class=\"o\">.</span>username<span class=\"o\">.</span>startswith<span class=\"p\">(</span><span class=\"s2\">&quot;b&quot;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                _<span class=\"p\">(</span><span class=\"s2\">&quot;Sorry, accounts starting with &#39;b&#39; aren&#39;t welcome here.&quot;</span><span class=\"p\">),</span>\n                code<span class=\"o\">=</span><span class=\"s2\">&quot;no_b_users&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.BaseUserCreationForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BaseUserCreationForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.BaseUserCreationForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> för att skapa en ny användare. Detta är den rekommenderade basklassen om du behöver anpassa formuläret för att skapa en användare.</p>\n<p>Den har tre fält: <code class=\"docutils literal notranslate\">username</code> (från användarmodellen), <code class=\"docutils literal notranslate\">password1</code> och <code class=\"docutils literal notranslate\">password2</code>. Den kontrollerar att <code class=\"docutils literal notranslate\">password1</code> och <code class=\"docutils literal notranslate\">password2</code> matchar, validerar lösenordet med <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/passwords/#django.contrib.auth.password_validation.validate_password\" title=\"django.contrib.auth.password_validation.validate_password\"><code class=\"xref py py-func docutils literal notranslate\">validate_password()</code></a>, och ställer in användarens lösenord med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\">set_password()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordChangeForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordChangeForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordChangeForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär för att tillåta en användare att ändra sitt lösenord.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordResetForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordResetForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär för att generera och e-posta en engångslänk för att återställa en användares lösenord.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordResetForm.send_mail\">\n<span class=\"sig-name descname\">send_mail</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">subject_template_name</em>, <em class=\"sig-param\">email_template_name</em>, <em class=\"sig-param\">context</em>, <em class=\"sig-param\">from_email</em>, <em class=\"sig-param\">to_email</em>, <em class=\"sig-param\">html_email_template_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordResetForm.send_mail\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Använder argumenten för att skicka ett <code class=\"docutils literal notranslate\">EmailMultiAlternatives</code>. Kan åsidosättas för att anpassa hur e-postmeddelandet skickas till användaren. Om du väljer att åsidosätta den här metoden bör du tänka på att hantera eventuella undantag som uppstår om e-postmeddelandet inte skickas.</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">Parametrar<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>subject_template_name</strong> – mallen för ämnet.</p></li>\n<li><p><strong>email_template_name</strong> – mallen för e-postmeddelandets brödtext.</p></li>\n<li><p><strong>context</strong> – kontext som skickas till <code class=\"docutils literal notranslate\">subject_template</code>, <code class=\"docutils literal notranslate\">email_template</code> och <code class=\"docutils literal notranslate\">html_email_template</code> (om det inte är <code class=\"docutils literal notranslate\">None</code>).</p></li>\n<li><p><strong>from_email</strong> – avsändarens e-postadress.</p></li>\n<li><p><strong>to_email</strong> – e-postadressen till den som begär utdraget.</p></li>\n<li><p><strong>html_email_template_name</strong> – mallen för HTML-texten; standardvärdet är <code class=\"docutils literal notranslate\">None</code>, i vilket fall ett e-postmeddelande med ren text skickas.</p></li>\n</ul>\n</dd>\n</dl>\n<p>Som standard fyller <code class=\"docutils literal notranslate\">save()</code> i <code class=\"docutils literal notranslate\">context</code> med samma variabler som <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetView\" title=\"django.contrib.auth.views.PasswordResetView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetView</code></a> skickar till sin e-postkontext.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.SetPasswordForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SetPasswordForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.SetPasswordForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär som låter en användare ändra sitt lösenord utan att ange det gamla lösenordet.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.UserChangeForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UserChangeForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.UserChangeForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett formulär som används i administratörsgränssnittet för att ändra en användares information och behörigheter.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.UserCreationForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UserCreationForm</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.UserCreationForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ärver från <a class=\"reference internal\" href=\"#django.contrib.auth.forms.BaseUserCreationForm\" title=\"django.contrib.auth.forms.BaseUserCreationForm\"><code class=\"xref py py-class docutils literal notranslate\">BaseUserCreationForm</code></a>. För att förhindra förväxling med liknande användarnamn tillåter formuläret inte användarnamn som skiljer sig åt endast i bokstäver.</p>\n</dd></dl>\n\n</section>\n<section id=\"authentication-data-in-templates\">\n<h3>Autentiseringsdata i mallar<a class=\"heading-anchor\" href=\"#authentication-data-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Den för närvarande inloggade användaren och deras behörigheter görs tillgängliga i <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/api/\"><span class=\"doc\">template context</span></a> när du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>.</p>\n<aside class=\"admonition-technicality admonition\" role=\"note\">\n<p class=\"admonition-title\">Teknisk karaktär</p>\n<p>Tekniskt sett görs dessa variabler endast tillgängliga i mallkontexten om du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> och kontextprocessorn <code class=\"docutils literal notranslate\">'django.contrib.auth.context_processors.auth'</code> är aktiverad. Det finns i den standardgenererade inställningsfilen. För mer information, se <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/api/#subclassing-context-requestcontext\"><span class=\"std std-ref\">RequestContext docs</span></a>.</p>\n</aside>\n<section id=\"users\">\n<h4>Användare<a class=\"heading-anchor\" href=\"#users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Vid rendering av en mall <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> lagras den för närvarande inloggade användaren, antingen en <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>-instans eller en <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\">AnonymousUser</code></a>-instans, i mallvariabeln <code class=\"docutils literal notranslate\">{{ user }}</code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">user.is_authenticated</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Welcome, <span class=\"cp\">{{</span> <span class=\"nv\">user.username</span> <span class=\"cp\">}}</span>. Thanks for logging in.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Welcome, new user. Please log in.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Denna mallkontextvariabel är inte tillgänglig om en <code class=\"docutils literal notranslate\">RequestContext</code> inte används.</p>\n</section>\n<section id=\"permissions\">\n<h4>Rättigheter<a class=\"heading-anchor\" href=\"#permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Den inloggade användarens behörigheter lagras i mallvariabeln <code class=\"docutils literal notranslate\">{{ perms }}</code>. Detta är en instans av <code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.PermWrapper</code>, som är en mallvänlig proxy av behörigheter.</p>\n<p>Att utvärdera en enattributsuppslagning av <code class=\"docutils literal notranslate\">{{perms }}</code> som en boolean är en proxy till <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.has_module_perms\" title=\"django.contrib.auth.models.User.has_module_perms\"><code class=\"xref py py-meth docutils literal notranslate\">User.has_module_perms()</code></a>. Till exempel, för att kontrollera om den inloggade användaren har några behörigheter i appen <code class=\"docutils literal notranslate\">foo</code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Att utvärdera en två-nivå-attributuppslagning som en boolean är en proxy till <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\">User.has_perm()</code></a>. Till exempel för att kontrollera om den inloggade användaren har behörigheten <code class=\"docutils literal notranslate\">foo.add_vote</code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.add_vote</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Här är ett mer komplett exempel på kontroll av behörigheter i en mall:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You have permission to do something in the foo app.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.add_vote</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can vote!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.add_driving</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can drive!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You don&#39;t have permission to do anything in the foo app.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Det är också möjligt att slå upp behörigheter med <code class=\"docutils literal notranslate\">{% if i %}</code>-satser. Till exempel:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"s1\">&#39;foo&#39;</span> <span class=\"k\">in</span> <span class=\"nv\">perms</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"s1\">&#39;foo.add_vote&#39;</span> <span class=\"k\">in</span> <span class=\"nv\">perms</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>In lookup works, too.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"managing-users-in-the-admin\">\n<span id=\"auth-admin\"></span><h2>Hantera användare i administratören<a class=\"heading-anchor\" href=\"#managing-users-in-the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du har både <code class=\"docutils literal notranslate\">django.contrib.admin</code> och <code class=\"docutils literal notranslate\">django.contrib.auth</code> installerade, ger admin ett bekvämt sätt att visa och hantera användare, grupper och behörigheter. Användare kan skapas och tas bort som vilken Django-modell som helst. Grupper kan skapas och behörigheter kan tilldelas användare eller grupper. En logg över användares redigeringar av modeller som görs i admin lagras och visas också.</p>\n<section id=\"id6\">\n<h3>Skapa användare<a class=\"heading-anchor\" href=\"#id6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du bör se en länk till ”Användare” i avsnittet ”Auth” på huvudadministratörens indexsida. Administrationssidan ”Lägg till användare” skiljer sig från vanliga administrationssidor genom att du måste välja ett användarnamn och lösenord innan du kan redigera resten av användarens fält. Alternativt kan du på den här sidan välja ett användarnamn och inaktivera lösenordsbaserad autentisering för användaren.</p>\n<p>Observera också: om du vill att ett användarkonto ska kunna skapa användare med hjälp av Django-adminsidan måste du ge dem behörighet att lägga till användare <em>och</em> ändra användare (dvs. behörigheterna ”Lägg till användare” och ”Ändra användare”). Om ett konto har behörighet att lägga till användare men inte att ändra dem, kommer det kontot inte att kunna lägga till användare. Varför inte? För att om du har behörighet att lägga till användare har du möjlighet att skapa superanvändare, som sedan i sin tur kan ändra andra användare. Så Django kräver lägg till <em>och</em> ändringsbehörigheter som en liten säkerhetsåtgärd.</p>\n<p>Tänk noga igenom hur du låter användare hantera behörigheter. Om du ger en icke-superanvändare möjlighet att redigera användare är det i slutändan samma sak som att ge dem superanvändarstatus eftersom de kommer att kunna höja behörigheterna för användare inklusive sig själva!</p>\n</section>\n<section id=\"id7\">\n<h3>Byte av lösenord<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Användarlösenord visas inte i administratören (och lagras inte heller i databasen), men <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/passwords/\"><span class=\"doc\">Lagringsdetaljer för lösenord</span></a> visas. När denna information visas finns en länk till ett formulär för lösenordsändring som gör det möjligt för administratörer att ändra eller ta bort användarlösenord.</p>\n</section>\n</section>","rootId":"using-the-django-authentication-system","toc":[{"title":"User-objekt","anchor":"user-objects","children":[{"title":"Skapa användare","anchor":"creating-users","children":[]},{"title":"Skapa superanvändare","anchor":"creating-superusers","children":[]},{"title":"Byte av lösenord","anchor":"changing-passwords","children":[]},{"title":"Autentisering av användare","anchor":"authenticating-users","children":[]}]},{"title":"Behörigheter och auktorisering","anchor":"permissions-and-authorization","children":[{"title":"Standardbehörighet","anchor":"default-permissions","children":[]},{"title":"Grupper","anchor":"groups","children":[]},{"title":"Skapa behörigheter programmatiskt","anchor":"programmatically-creating-permissions","children":[]},{"title":"Cachelagring av behörigheter","anchor":"permission-caching","children":[]},{"title":"Proxy-modeller","anchor":"proxy-models","children":[]}]},{"title":"Autentisering i webbförfrågningar","anchor":"authentication-in-web-requests","children":[{"title":"Så här loggar du in en användare","anchor":"how-to-log-a-user-in","children":[{"title":"Välja backend för autentisering","anchor":"selecting-the-authentication-backend","children":[]}]},{"title":"Så här loggar du ut en användare","anchor":"how-to-log-a-user-out","children":[]},{"title":"Begränsning av åtkomst till inloggade användare","anchor":"limiting-access-to-logged-in-users","children":[{"title":"Det råa sättet","anchor":"the-raw-way","children":[]},{"title":"Dekoratorn login_required (inloggning krävs)","anchor":"the-login-required-decorator","children":[]},{"title":"Mixin LoginRequiredMixin mixin","anchor":"the-loginrequiredmixin-mixin","children":[]},{"title":"Dekoratorn login_not_required","anchor":"the-login-not-required-decorator","children":[]},{"title":"Begränsa åtkomsten till inloggade användare som klarar ett test","anchor":"limiting-access-to-logged-in-users-that-pass-a-test","children":[]},{"title":"Dekoratorn permission_required (tillstånd krävs)","anchor":"the-permission-required-decorator","children":[]},{"title":"Mixin PermissionRequiredMixin mixin","anchor":"the-permissionrequiredmixin-mixin","children":[]}]},{"title":"Omdirigering av obehöriga förfrågningar i klassbaserade vyer","anchor":"redirecting-unauthorized-requests-in-class-based-views","children":[{"title":"Inaktivering av session vid byte av lösenord","anchor":"session-invalidation-on-password-change","children":[]}]},{"title":"Autentiseringsvyer","anchor":"module-django.contrib.auth.views","children":[{"title":"Använda vyerna","anchor":"using-the-views","children":[]},{"title":"Alla autentiseringsvyer","anchor":"all-authentication-views","children":[]}]},{"title":"Hjälpfunktioner","anchor":"helper-functions","children":[]},{"title":"Inbyggda formulär","anchor":"module-django.contrib.auth.forms","children":[]},{"title":"Autentiseringsdata i mallar","anchor":"authentication-data-in-templates","children":[{"title":"Användare","anchor":"users","children":[]},{"title":"Rättigheter","anchor":"permissions","children":[]}]}]},{"title":"Hantera användare i administratören","anchor":"managing-users-in-the-admin","children":[{"title":"Skapa användare","anchor":"id6","children":[]},{"title":"Byte av lösenord","anchor":"id7","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/5.2/topics/"},{"docname":"topics/auth/index","title":"Användarautentisering i Django","url":"/sv/5.2/topics/auth/"}],"prev":{"docname":"topics/auth/index","title":"Användarautentisering i Django","url":"/sv/5.2/topics/auth/"},"next":{"docname":"topics/auth/passwords","title":"Lösenordshantering i Django","url":"/sv/5.2/topics/auth/passwords/"},"formats":{"html":"/sv/5.2/topics/auth/default/","markdown":"/sv/5.2/topics/auth/default.md","json":"/sv/5.2/topics/auth/default.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/auth/default.txt","official":"https://docs.djangoproject.com/sv/5.2/topics/auth/default/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}