@@ -218,6 +218,8 @@ def _create_or_login(resp):
218
218
db .session .add (user )
219
219
db .session .commit ()
220
220
221
+ _send_welcome_email (user )
222
+
221
223
flash (u'帐号已经创建, 可以在资料<a href="%s">修改页面</a>补充密码等信息' % url_for ('users.general' ), 'success' )
222
224
223
225
app .logger .info ('Signin users: %s' , user .email )
@@ -240,6 +242,7 @@ def signup():
240
242
user .set_password (form .password1 .data )
241
243
db .session .add (user )
242
244
app .logger .info (u'New users added: %s' , user )
245
+ _send_welcome_email (user )
243
246
flash (u'注册成功' , 'success' )
244
247
return redirect (url_for ('users.signin' ))
245
248
@@ -279,8 +282,6 @@ def general():
279
282
# TODO 处理更新用户资料的请求
280
283
# TODO 用户照片上传
281
284
282
- # TODO: 用户找回密码功能
283
-
284
285
# 更新用户slug功能
285
286
@blurprint .route ('/slug' , methods = ['GET' , 'POST' ])
286
287
@login .login_required
@@ -296,14 +297,27 @@ def slug():
296
297
form .process (obj = current_user .user )
297
298
return render_template ('users/slug.html' , form = form , skip_slug_info = True )
298
299
300
+ def _send_welcome_email (user ):
301
+ """ 发送欢迎邮件 """
302
+
303
+ try :
304
+ app .logger .info ('Sending welcome email to %s' , user .email )
305
+ msg = Message (u'欢迎来到ScriptFan' , recipients = [user .email ])
306
+ msg .html = render_template ('users/email/welcome.html' , user = user )
307
+ # FIXME: 邮件发送使用异步方式,避免用户等待太长时间
308
+ mail .send (msg )
309
+ app .logger .info ('Mail sent successfully.' )
310
+ except Exception , e :
311
+ app .logger .info (e .message )
312
+ app .logger .error ('Failed to send welcome reset mail, because: %s' , e )
299
313
300
314
def _send_reset_email (user , token ):
301
315
""" 发送密码重置邮件 """
302
316
303
317
try :
304
318
app .logger .info ('Sending reset email to %s with token %s' , user .email , token )
305
319
msg = Message (u'ScriptFan密码重置' , recipients = [user .email ])
306
- msg .html = render_template ('users/reset_email .html' , user = user , token = token )
320
+ msg .html = render_template ('users/email/reset .html' , user = user , token = token )
307
321
# FIXME: 邮件发送使用异步方式,避免用户等待太长时间
308
322
mail .send (msg )
309
323
app .logger .info ('Mail sent successfully.' )
@@ -313,6 +327,20 @@ def _send_reset_email(user, token):
313
327
app .logger .error ('Failed to send password reset mail, because: %s' , e )
314
328
return False
315
329
330
+ def _send_reset_success_email (user ):
331
+ """ 发送重置通知邮件 """
332
+
333
+ try :
334
+ app .logger .info ('Sending email confirm notification to %s' , user .email )
335
+ msg = Message (u'你在 ScriptFan 的密码已经重置!' , recipients = [user .email ])
336
+ msg .html = render_template ('users/email/reset_success.html' , user = user )
337
+ # FIXME: 邮件发送使用异步方式,避免用户等待太长时间
338
+ mail .send (msg )
339
+ app .logger .info ('Mail sent successfully.' )
340
+ except Exception , e :
341
+ app .logger .info (e .message )
342
+ app .logger .error ('Failed to send email reset notification mail, because: %s' , e )
343
+
316
344
317
345
@blurprint .route ('/reset/step1' , methods = ['GET' , 'POST' ])
318
346
def reset_step1 ():
@@ -336,11 +364,12 @@ def reset_step1():
336
364
337
365
def _valid_reset_token ():
338
366
""" 验证重置口令及邮件地址是否匹配 """
339
-
367
+ email , token = request .args .get ('email' ), request .args .get ('token' )
368
+ app .logger .info ('Validating email reset with email: %s and token: %s' , email , token )
340
369
return session .get ('reset_email' ) and \
341
370
session .get ('reset_token' ) and \
342
- session ['reset_email' ] == request . args [ ' email' ] and \
343
- session ['reset_token' ] == request . args [ ' token' ]
371
+ session ['reset_email' ] == email and \
372
+ session ['reset_token' ] == token
344
373
345
374
@blurprint .route ('/reset/step2' , methods = ['GET' , 'POST' ])
346
375
def reset_step2 ():
@@ -353,12 +382,12 @@ def reset_step2():
353
382
user .set_password (form .password .data )
354
383
flash (u'用户密码已经更新' , 'success' )
355
384
356
- # TODO: 通过重置密码功能修改密码成功后,向用户发送邮件提醒。
357
-
358
385
# 清除验证用的 Token
359
386
del session ['reset_email' ]
360
387
del session ['reset_token' ]
361
388
389
+ _send_reset_success_email (user )
390
+
362
391
return redirect (url_for ('users.signin' ))
363
392
364
393
# 如果邮件及当前token均匹配,则显示重置密码的表单
0 commit comments