Package: django-web3-auth
django-web3-auth is a pluggable Django app that enables login/signup via an Ethereum wallet (a la CryptoKitties). The user authenticates themselves by digitally signing the session key with their wallet’s private key.DocumentationThe full documentation is athttps://django-web3-auth.readthedocs.io.Example projecthttps://github.com/Bearle/django-web3-auth/tree/master/exampleYou can check out our example project by cloning the repo and heading into example/ directory.
There is a README file for you to check, also.FeaturesWeb3 API login, signupWeb3 Django forms for signup, loginChecks ethereum address validityUses random token signing as proof of private key posessionEasy to set up and use (just one click)Custom auth backendVERY customizable - uses Django settings, allows for custom User modelVanilla Javascript helpers includedQuickstartInstall Django-Web3-Auth with pip:pip install django-web3-authAdd it to yourINSTALLED_APPS:INSTALLED_APPS=(...'web3auth.apps.Web3AuthConfig',...)Set‘web3auth.backend.Web3Backend’as your authentication backend:AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.ModelBackend','web3auth.backend.Web3Backend']Set your User model’s field to use as ETH address provider:WEB3AUTH_USER_ADDRESS_FIELD='username'And if you have some other fields you want to be in the SignupForm, add them too:WEB3AUTH_USER_SIGNUP_FIELDS=['email',]Add Django-Web3-Auth’s URL patterns:fromweb3authimporturlsasweb3auth_urlsurlpatterns=[...url(r'^',include(web3auth_urls)),...]Add some javascript to handle login:<scriptsrc="{% static 'web3auth/js/web3auth.js' %}"></script>functionstartLogin(){if(typeofweb3!=='undefined'){checkWeb3(function(loggedIn){if(!loggedIn){alert("Please unlock your web3 provider (probably, Metamask)")}else{varlogin_url='{% url 'web3auth:web3auth_login_api' %}';web3Login(login_url,console.log,console.log,console.log,console.log,console.log,function(resp){console.log(resp);window.location.replace(resp.redirect_url);});}});}else{alert('web3 missing');}}You can access signup using {% url ‘web3auth:web3auth_signup’ %}.If you have any questions left, head to the example apphttps://github.com/Bearle/django-web3-auth/tree/master/exampleImportant details and FAQIf you set a custom address field (WEB3AUTH_USER_ADDRESS_FIELD), it MUST be unique (unique=True).This is needed because if it’s not, the user can register a new account with the same address as the other one,
meaning that the user can now login as any of those accounts (sometimes being the wrong one).2.How do i deal with user passwords or Password is not setThere should be some code in your project that generates a password usingUser.objects.make_random_passwordand sends it to a user email.
Or, even better, sends them a ‘restore password’ link.
Also, it’s possible to copy signup_view to your project, assign it a url, and add the corresponding lines to set some password for a user.Why do i have to sign a message? It’s not needed in MyEtherWallet or other DApps!The main reason is that when using a DApp, you most likely don’t have an account on the website, it’s accessible only with web3 (Metamask).
When using web3 only to sign into user account, it is necessary to prove your identity with a private key (e.g. sign a random message),
because when we have backend we can’t trust any user just by his knowledge of the public address.
Signed message proves that user possesses the private key, associated with the address.Running TestsDoes the code actually work?source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ toxCreditsTools used in rendering this package:Cookiecuttercookiecutter-djangopackage0.1.6 (2021-09-06)Update from PR#6 by @hiporoxResolve’s issue #4 -  Example app has missing url configuration0.1.5 (2021-09-06)Update from PR#5 by @hiporoxUpdated .gitignore to include missing file typesAdded script tag to the base.html that imports web3 since MetaMask no longer auto imports (https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3)History0.1.4 (2021-05-06)Try fix rlp0.1.3 (2021-03-23)Try fix ethereum0.1.2 (2021-03-16)Flake8, tox fixes in PR#2 by SukiCZ0.1.1 (2021-03-16)Bump ‘rlp’ - PR#1 by SukiCZ0.1.0 (2018-06-29)First release on PyPi