针对本章的一些小问题提出建议
仔细思考逻辑,会发现,自动生成的字段
activation_token是有可能重复的(虽然概率几乎等于中500万),但是处于严谨方面的考虑,我对代码作了以下修改
- 路由配置部分 routes/web.php
... // 账户激活路由:不再是传1个参数,而是传2个参数(新注册用户的主键id 和 邮箱激活码) Route::get('/signup/user/{id}/confirm/{token}', 'UsersController@confirmEmail')->name('confirm_email'); ... - 邮件模板部分 resources/views/emails/confirm.blade.php
... 请点击下面的链接完成注册: <!-- 对应路由格式,这里注意2个参数使用数组 [] 的形式传过去的 --> <a href="{{ route('confirm_email', [$user->id, $user->activation_token]) }}"> {{ route('confirm_email', [$user->id, $user->activation_token]) }} </a> ... -
激活逻辑部分
public function confirmEmail($id, $token) { $user = User::find($id); //根据id找到用户 // 匹配 token ,确认激活,更新数据 if($user->activation_token == $token) { $user->activated = true; $user->activation_token = null; $user->save(); // 自动登陆,发送提示,重定向 Auth::login($user); session()->flash('success', '恭喜你,激活成功!'); return redirect()->route('users.show', [$user]); } else { session()->flash('danger', '激活失败。请再次点击邮件中的链接重试'); return redirect('/'); } }- 在激活逻辑中,我们先通过传过来的 id 去找对应的那条数据,然后比对找到的这条数据中的 activation_token 字段是不是等于传递过来的参数 $token,如果相等则激活。
还有我莫名其妙踩了个坑,就是迁移文件生成的 activated 字段用
...->default(false)设置了默认值,结果不管用,这个错误发生的原因现在还没找到,我是用数据库管理工具强行设置该字段拥有默认值 0 最终解决的。
关于 LearnKu
记录是个好习惯,不过建议对问题做深入学习和探索后再下定论。还有就是尽量别删帖,这对写了一堆评论的同学是很大的伤害(上个分享帖我回答了一堆,然后...被删帖,好心痛 :joy: )
@Summer 上一个帖子仔细想想打自己脸了,所以删了,第一点针对 Model 话我只是觉得既然 Laravel 的作者这么设置了,我们尽量不要去改动,因为 User 模型一改会导致很多地方的命名空间需要改,当然这是我的个人习惯。第二点的话我倒是确实没想那么多,受教了。
@proHorry 可以留着嘛,讨论、学习、成长才是目的
这个其实并不是问题,只是@Summer 为了让大家容易理解,实际操作都不是这么干的。你看看5.7新增的email verification就知道了。