Skip to content

Commit e90240c

Browse files
committed
Add account activations
1 parent 78a5494 commit e90240c

File tree

8 files changed

+107
-6
lines changed

8 files changed

+107
-6
lines changed

app/Http/Controllers/SessionsController.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,14 @@ public function store(Request $request)
3636
];
3737

3838
if (Auth::attempt($credentials, $request->has('remember'))) {
39-
session()->flash('success', '欢迎回来!');
40-
return redirect()->intended(route('users.show', [Auth::user()]));
39+
if(Auth::user()->activated) {
40+
session()->flash('success', '欢迎回来!');
41+
return redirect()->intended(route('users.show', [Auth::user()]));
42+
} else {
43+
Auth::logout();
44+
session()->flash('warning', '你的账号未激活,请检查邮箱中的注册邮件进行激活。');
45+
return redirect('/');
46+
}
4147
} else {
4248
session()->flash('danger', '很抱歉,您的邮箱和密码不匹配');
4349
return redirect()->back();

app/Http/Controllers/UsersController.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use App\Models\User;
1111

1212
use Auth;
13+
use Mail;
1314

1415
class UsersController extends Controller
1516
{
@@ -55,9 +56,9 @@ public function store(Request $request)
5556
'password' => $request->password,
5657
]);
5758

58-
Auth::login($user);
59-
session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');
60-
return redirect()->route('users.show', [$user]);
59+
$this->sendEmailConfirmationTo($user);
60+
session()->flash('success', '验证邮件已发送到你的注册邮箱上,请注意查收。');
61+
return redirect('/');
6162
}
6263

6364
public function edit($id)
@@ -96,4 +97,31 @@ public function destroy($id)
9697
session()->flash('success', '成功删除用户!');
9798
return back();
9899
}
100+
101+
protected function sendEmailConfirmationTo($user)
102+
{
103+
$view = 'emails.confirm';
104+
$data = compact('user');
105+
$from = '[email protected]';
106+
$name = 'Aufree';
107+
$to = $user->email;
108+
$subject = "感谢注册 Sample 应用!请确认你的邮箱。";
109+
110+
Mail::send($view, $data, function ($message) use ($from, $name, $to, $subject) {
111+
$message->from($from, $name)->to($to)->subject($subject);
112+
});
113+
}
114+
115+
public function confirmEmail($token)
116+
{
117+
$user = User::where('activation_token', $token)->firstOrFail();
118+
119+
$user->activated = true;
120+
$user->activation_token = null;
121+
$user->save();
122+
123+
Auth::login($user);
124+
session()->flash('success', '恭喜你,激活成功!');
125+
return redirect()->route('users.show', [$user]);
126+
}
99127
}

app/Http/routes.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@
1010
get('login', 'SessionsController@create')->name('login');
1111
post('login', 'SessionsController@store')->name('login');
1212
delete('logout', 'SessionsController@destroy')->name('logout');
13+
14+
get('signup/confirm/{token}', 'UsersController@confirmEmail')->name('confirm_email');

app/Models/User.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,16 @@ class User extends Model implements AuthenticatableContract,
3535
*
3636
* @var array
3737
*/
38-
protected $hidden = ['password', 'remember_token'];
38+
protected $hidden = ['password', 'remember_token'];
39+
40+
public static function boot()
41+
{
42+
parent::boot();
43+
44+
static::creating(function ($user) {
45+
$user->activation_token = str_random(30);
46+
});
47+
}
3948

4049
public function gravatar($size = '100')
4150
{

database/factories/ModelFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
'name' => $faker->name,
1818
'email' => $faker->safeEmail,
1919
'is_admin' => false,
20+
'activated' => true,
2021
'password' => str_random(10),
2122
'remember_token' => str_random(10),
2223
'created_at' => $date_time,
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use Illuminate\Database\Schema\Blueprint;
4+
use Illuminate\Database\Migrations\Migration;
5+
6+
class AddActivationToUsersTable extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
Schema::table('users', function (Blueprint $table) {
16+
$table->string('activation_token')->nullable();
17+
$table->boolean('activated')->default(false);
18+
});
19+
}
20+
21+
/**
22+
* Reverse the migrations.
23+
*
24+
* @return void
25+
*/
26+
public function down()
27+
{
28+
Schema::table('users', function (Blueprint $table) {
29+
$table->dropColumn('activation_token');
30+
$table->dropColumn('activated');
31+
});
32+
}
33+
}

database/seeds/UsersTableSeeder.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public function run()
2020
$user->email = '[email protected]';
2121
$user->password = 'password';
2222
$user->is_admin = true;
23+
$user->activated = true;
2324
$user->save();
2425
}
2526
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>注册确认链接</title>
6+
</head>
7+
<body>
8+
<h1>感谢您在 Sample 网站进行注册!</h1>
9+
10+
<p>
11+
请点击下面的链接完成注册:
12+
<a href="{{ route('confirm_email', $user->activation_token) }}">
13+
{{ route('confirm_email', $user->activation_token) }}
14+
</a>
15+
</p>
16+
17+
<p>
18+
如果这不是您本人的操作,请忽略此邮件。
19+
</p>
20+
</body>
21+
</html>

0 commit comments

Comments
 (0)