【问题标题】:Laravel 6 Fully Custom Auth systemLaravel 6 完全自定义的身份验证系统
【发布时间】:2020-06-17 03:31:40
【问题描述】:

我开始通过 Laravel 构建应用程序,我是初学者。 我想建立一个自己的 Auth 系统,因为目前的系统不太适合我的用例。

我的用户将通过用户名和密码登录。注册不存在,因为所有用户帐户将由我自己管理。

我对 Laravel 实现的问题是我与 Laravel 版本略有不同。例如,我的用户表没有时间戳。我尝试在文档的帮助下构建已发布的版本,但失败了。

另一个问题是我还想在我自己的实现中使用刀片语法中的@auth

是否有接口表示用户已登录?:

if(Hash::make("password") === $user->password){
Auth::login();
}else{
return redirect("/login");
}

Auth::login() 是告诉 laravel 用户已登录的接口。

(抱歉英语不好)

【问题讨论】:

    标签: php laravel frameworks


    【解决方案1】:

    我不知道这是不是一个很好的答案,但也不是一个很好的评论......

    例如,我的用户表没有时间戳。

    为什么?有具体原因吗? Laravel 将为您管理所有这些;真的没什么可做的——如果稍后您需要显示“上次登录”或“这个用户是什么时候创建的?”,这是一个不错的小奖励。

    如果您想删除它们,您需要查看您的迁移。具体来说,create_users_table 迁移。你可以在这里找到:

    /database/migrations/2014_10_12_000000_create_users_table.php
    

    日期可能不同,但这是您应该查找的文件。在该文件中,您应该会看到如下内容:

    ...
    $table->rememberToken();
    $table->timestamps();  // remove or comment this line out.
    ...
    

    这是在您的数据库中创建 created_atupdated_at 列的行。

    注释掉该行后,您可以重新运行迁移以更新数据库:php artisan migrate:refresh。此时,您应该不再看到时间戳列。

    可能还需要更新一些控制器逻辑。我总是把它们留在那儿,所以我不能自信地说你很好。

    刀片

    使用刀片时,您可以像这样检查当前用户:

    Auth::user()
    

    例如,我的主页上可以有这样的内容:

    <h1>Hello, {{ Auth::user()->name }}</h1> // Hello, Damon
    

    另一个选项如果您需要检查用户是否已登录,您可以使用@guest

    例子:

    @guest
        <li class="nav-item">
            <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
        </li>
    @else
        <li class="nav-item">
            <a class="nav-link" href="{{ route('logout') }}">{{ __('Logout') }}</a>
        </li>
    @endguest
    

    这里我们检查用户是否通过了身份验证。如果他们是客人,请显示登录链接。否则显示注销链接。

    在控制器级别,您可以像这样检查当前用户:

    // Get the authenticated user
    $user = auth()->user();
    

    一个非常简单的例子可能是这样的:

    MyController.php

    public function example() {
        // Get the authenticated user.
        $user = auth()->user();
    
        // Redirect if not logged in.
        if($user) {
            return view('my-view');
        } else {
            return redirect('login');
        }
    }
    

    Laravel Docs 在引导您完成设置方面做得很好。您真的可以将身份验证塑造成您想要的样子。

    我不相信我真的回答了你的问题,但希望能帮助提供一些见解或需要考虑的事情。

    【讨论】:

    • 当我更改迁移时,身份验证系统出现异常。我将“名称”更改为“用户名”,但找不到“名称”。我还需要在哪里更改它?
    • Try this 并寻找“用户名自定义”
    • 您能向我解释一下“手动验证用户”吗?如何对用户进行身份验证?如果我将此函数添加到 LoginController(通过工匠生成),那么该函数不会被调用?我做错了什么?
    • Nvm 我创建了自己的 /login 发布路由并把它放在那里,现在它可以工作了
    • 链接中有一个部分叫做“用户名自定义”。它讨论了如何将 username 字段重命名为您想要的任何名称。听起来你现在正在滚动。
    猜你喜欢
    • 2015-07-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2014-03-30
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多