mirror of
				https://github.com/Tivix/django-rest-auth.git
				synced 2025-10-30 07:17:30 +03:00 
			
		
		
		
	email work
This commit is contained in:
		
							parent
							
								
									0677109c1b
								
							
						
					
					
						commit
						1a08fd90dc
					
				|  | @ -24,6 +24,9 @@ urlpatterns = [ | |||
|     url(r'^password-change/$', | ||||
|         TemplateView.as_view(template_name="password_change.html"), | ||||
|         name='password-change'), | ||||
|     url(r'^email-change/$', | ||||
|         TemplateView.as_view(template_name="email_change.html"), | ||||
|         name='email-change'), | ||||
| 
 | ||||
| 
 | ||||
|     # this url is used to generate email content | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ | |||
|                 <li><a href="{% url 'login' %}">Login</a></li> | ||||
|                 <li><a href="{% url 'password-reset' %}">Password Reset</a></li> | ||||
|                 <li><a href="{% url 'password-reset-confirm' %}">Password Reset Confirm</a></li> | ||||
|                 <li><a href="{% url 'email-change' %}">Update Primary Email</a></li> | ||||
|                 <li class="divider"></li> | ||||
|                 <!-- these pages require user token --> | ||||
|                 <li><a href="{% url 'user-details' %}">User details</a></li> | ||||
|  |  | |||
							
								
								
									
										39
									
								
								demo/templates/email_change.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								demo/templates/email_change.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| {% extends "base.html" %} | ||||
| 
 | ||||
| {% block content %} | ||||
| 
 | ||||
|   <div class="row"> | ||||
|     <div class="form-group"> | ||||
|       <label for="token" class="col-sm-2 control-label">User Token</label> | ||||
|       <div class="col-sm-4"> | ||||
|         <input name="token" type="text" class="form-control" id="token" placeholder="Token"> | ||||
|         <p class="help-block">Token received after login</p> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <div class="row"> | ||||
|     <h3>Update User Details</h3><hr/> | ||||
|     {% include "fragments/email_change_form.html" %} | ||||
|   </div> | ||||
| {% endblock %} | ||||
| 
 | ||||
| {% block script %} | ||||
|     <script type="text/javascript"> | ||||
|       $().ready(function(){ | ||||
|         $('form button[type=submit]').click(function(){ | ||||
|           var token = $('input[name=token]').val(); | ||||
|           var form = $('form'); | ||||
|           $.ajax({ | ||||
|             url: form.attr('action'), | ||||
|             data: $('form').serialize(), | ||||
|             type: "POST", | ||||
|             beforeSend: function(xhr){xhr.setRequestHeader('Authorization', 'Token '+token);} | ||||
|           }).fail(function(data){error_response(data);}) | ||||
|           .done(function(data){susccess_response(data);}); | ||||
|           return false; | ||||
|         }); | ||||
| 
 | ||||
|       }); | ||||
|     </script> | ||||
| {% endblock %} | ||||
							
								
								
									
										26
									
								
								demo/templates/fragments/email_change_form.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								demo/templates/fragments/email_change_form.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| <!-- Signup form --> | ||||
| <form class="form-horizontal ajax-post" role="form" action="{% url 'rest_email_change' %}">{% csrf_token %} | ||||
|   <div class="form-group"> | ||||
| 
 | ||||
|     <label for="email" class="col-sm-2 control-label">Email</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input name="email" type="text" class="form-control" id="email" placeholder="Email"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|     <label for="password" class="col-sm-2 control-label">Password</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input name="password" type="password" class="form-control" id="password" placeholder="Password"> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <div class="form-group"> | ||||
|     <div class="col-sm-offset-2 col-sm-10"> | ||||
|       <button type="submit" class="btn btn-default">Change Email</button> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <div class="form-group api-response"></div> | ||||
| </form> | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,5 +1,5 @@ | |||
| <!-- Signup form --> | ||||
| <form class="form-horizontal ajax-post" role="form" action="{% url 'rest_verify_email' %}">{% csrf_token %} | ||||
| <form class="form-horizontal ajax-post" role="form" action="{% url 'rest_email_change' %}">{% csrf_token %} | ||||
|   <div class="form-group"> | ||||
|     <label for="key" class="col-sm-2 control-label">Key</label> | ||||
|     <div class="col-sm-10"> | ||||
|  |  | |||
|  | @ -6,7 +6,8 @@ from rest_auth.serializers import ( | |||
|     LoginSerializer as DefaultLoginSerializer, | ||||
|     PasswordResetSerializer as DefaultPasswordResetSerializer, | ||||
|     PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer, | ||||
|     PasswordChangeSerializer as DefaultPasswordChangeSerializer) | ||||
|     PasswordChangeSerializer as DefaultPasswordChangeSerializer | ||||
|     EmailChangeSerializer as DefaultEmailChangeSerializer) | ||||
| from .utils import import_callable | ||||
| 
 | ||||
| 
 | ||||
|  | @ -42,4 +43,11 @@ PasswordChangeSerializer = import_callable( | |||
|         'PASSWORD_CHANGE_SERIALIZER', | ||||
|         DefaultPasswordChangeSerializer | ||||
|     ) | ||||
|     ) | ||||
| 
 | ||||
| EmailChangeSerializer = import_callable( | ||||
|     serializers.get( | ||||
|         'EMAIL_CHANGE_SERIALIZER', | ||||
|         DefaultEmailChangeSerializer) | ||||
|     ) | ||||
| ) | ||||
|  |  | |||
|  | @ -20,4 +20,5 @@ urlpatterns = [ | |||
|     # djang-allauth https://github.com/pennersr/django-allauth/blob/master/allauth/account/views.py#L190 | ||||
|     url(r'^account-confirm-email/(?P<key>\w+)/$', TemplateView.as_view(), | ||||
|         name='account_confirm_email'), | ||||
|     url(r'^change-email/$', VerifyEmailView.as_view(), name='rest_email_change'), | ||||
| ] | ||||
|  |  | |||
|  | @ -85,7 +85,7 @@ class TokenSerializer(serializers.ModelSerializer): | |||
| 
 | ||||
|     class Meta: | ||||
|         model = Token | ||||
|         fields = ('key',) | ||||
|         fields = ('key') | ||||
| 
 | ||||
| 
 | ||||
| class UserDetailsSerializer(serializers.ModelSerializer): | ||||
|  | @ -96,7 +96,6 @@ class UserDetailsSerializer(serializers.ModelSerializer): | |||
|     class Meta: | ||||
|         model = UserModel | ||||
|         fields = ('username', 'email', 'first_name', 'last_name') | ||||
|         read_only_fields = ('email', ) | ||||
| 
 | ||||
| 
 | ||||
| class PasswordResetSerializer(serializers.Serializer): | ||||
|  | @ -221,3 +220,33 @@ class PasswordChangeSerializer(serializers.Serializer): | |||
|         if not self.logout_on_password_change: | ||||
|             from django.contrib.auth import update_session_auth_hash | ||||
|             update_session_auth_hash(self.request, self.user) | ||||
| 
 | ||||
| 
 | ||||
| class EmailChangeSerializer(serializers.Serializer): | ||||
| 
 | ||||
|     email_address = serializers.CharField(max_length=128) | ||||
| 
 | ||||
|     set_email_form_class = SetEmailForm | ||||
| 
 | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         self.old_email_field_enabled = getattr( | ||||
|             settings, 'OLD_EMAIL_FIELD_ENABLED', False | ||||
|         ) | ||||
|         self.logout_on_email_change = getattr( | ||||
|             settings, 'LOGOUT_ON_EMAIL_CHANGE', False | ||||
|         ) | ||||
|         super(EmailChangeSerializer, self).__init__(*args, **kwargs) | ||||
| 
 | ||||
|         if not self.old_email_field_enabled: | ||||
|             self.fields.pop('old_email') | ||||
| 
 | ||||
|         self.request = self.context.get('request') | ||||
|         self.user = getattr(self.request, 'user', None) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     def save(self): | ||||
|         self.set_email_form.save() | ||||
|         if not self.logout_on_email_change: | ||||
|             from django.contrib.auth import update_session_auth_hash | ||||
|             update_session_auth_hash(self.request, self.user) | ||||
|  | @ -2,7 +2,7 @@ from django.conf.urls import url | |||
| 
 | ||||
| from rest_auth.views import ( | ||||
|     LoginView, LogoutView, UserDetailsView, PasswordChangeView, | ||||
|     PasswordResetView, PasswordResetConfirmView | ||||
|     PasswordResetView, PasswordResetConfirmView, EmailChangeView, | ||||
| ) | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|  | @ -17,4 +17,6 @@ urlpatterns = [ | |||
|     url(r'^user/$', UserDetailsView.as_view(), name='rest_user_details'), | ||||
|     url(r'^password/change/$', PasswordChangeView.as_view(), | ||||
|         name='rest_password_change'), | ||||
|     url(r'^email/change/$', EmailChangeView.as_view(), | ||||
|         name='rest_email_change'), | ||||
| ] | ||||
|  |  | |||
|  | @ -154,3 +154,21 @@ class PasswordChangeView(GenericAPIView): | |||
|         serializer.is_valid(raise_exception=True) | ||||
|         serializer.save() | ||||
|         return Response({"success": "New password has been saved."}) | ||||
| 
 | ||||
|  class EmailChangeView(GenericAPIView): | ||||
| 
 | ||||
|     """ | ||||
|     Calls Django Auth SetPasswordForm save method. | ||||
| 
 | ||||
|     Accepts the following POST parameters: new_password1, new_password2 | ||||
|     Returns the success/fail message. | ||||
|     """ | ||||
| 
 | ||||
|     serializer_class = EmailChangeSerializer | ||||
|     permission_classes = (IsAuthenticated,) | ||||
| 
 | ||||
|     def post(self, request): | ||||
|         serializer = self.get_serializer(data=request.data) | ||||
|         serializer.is_valid(raise_exception=True) | ||||
|         serializer.save() | ||||
|         return Response({"success": "New Email has been saved."})        | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user