针对本章的一些小问题提出建议

仔细思考逻辑,会发现,自动生成的字段 activation_token 是有可能重复的(虽然概率几乎等于中500万),但是处于严谨方面的考虑,我对代码作了以下修改

  1. 路由配置部分 routes/web.php
    ...
    // 账户激活路由:不再是传1个参数,而是传2个参数(新注册用户的主键id 和 邮箱激活码)
    Route::get('/signup/user/{id}/confirm/{token}', 'UsersController@confirmEmail')->name('confirm_email');
    ...
  2. 邮件模板部分 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>
    ...
  3. 激活逻辑部分

    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 最终解决的。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4
Summer

记录是个好习惯,不过建议对问题做深入学习和探索后再下定论。还有就是尽量别删帖,这对写了一堆评论的同学是很大的伤害(上个分享帖我回答了一堆,然后...被删帖,好心痛 :joy: )

5年前 评论

@Summer 上一个帖子仔细想想打自己脸了,所以删了,第一点针对 Model 话我只是觉得既然 Laravel 的作者这么设置了,我们尽量不要去改动,因为 User 模型一改会导致很多地方的命名空间需要改,当然这是我的个人习惯。第二点的话我倒是确实没想那么多,受教了。

5年前 评论
Summer

@proHorry 可以留着嘛,讨论、学习、成长才是目的

5年前 评论

这个其实并不是问题,只是@Summer 为了让大家容易理解,实际操作都不是这么干的。你看看5.7新增的email verification就知道了。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!