使用一个参数登录

时间:2019-05-04 15:05:02

标签: php laravel laravel-5 laravel-5.2 laravel-5.1

我想在Laravel中进行登录,该登录仅接收一个参数,即具有简单的形式来接收一个输入,并基于该输入对用户进行身份验证。如果用户是admin,它将重定向到/adminpage,否则,如果用户是普通用户,它将重定向到/homepage

我想使用自定义表,模型和控制器。我搜索了互联网,但找不到解决方案。

编辑 我有这样的表格:

<form action="someroute" method="POST">
<input type="text" name="rf_id">
<input type="submit" value="login">
</form>

我的迁移是:

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('lastname');
            $table->string('workid');
            $table->boolean('isAdmin')->default(False);
            $table->string('rf_id');//
            $table->timestamps();
        });

现在我需要处理该问题的控制器。 因此,基于rf_id,控制器需要查找用户并检查其角色。 我尝试这样做,但不起作用:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TestController extends Controller
{


    public function index(){
        return view('singin');
    }

    public function login(Request $request){

        $credentials = $request->only('rf_id');

        if(Auth::attempt($credentials)){
             //we need to know who is logging in
             return $this->filterAndRedirect(Auth::user());
         }
         return "there is no user with that rfid";
     }

     private function filterAndRedirect(User $user){
       //the function to take care of the routing
       if($user->isAdmin){
          # return redirect('/homepage');
          return "This is admin";

       }
       else{
          # return redirect('/adminpage');
          return "This is worker";

     }

}
}

1 个答案:

答案 0 :(得分:0)

这就是我要怎么做;

  • 首先,您必须在迁移文件中为用户类型和登录参数添加表格列。请在下面查看迁移文档

  • 下一个是您拥有表单的页面,我不知道您的参数是什么,因此我将其称为“ param”。我假设您知道如何使用laravel创建和提交表单,所以我不会在此处放置代码。

  • 现在有趣的部分是控制器:

这是我在RegisterController中创建的用户的外观;

请注意,我正在使用标准的laravel auth控制器

public function createStandardUser(Request $request){
    //function to add the Standard user
    $user = User::create([
    'name' => $request['name'],
    'email' => $request['email'],
    'param' => $request['login-param'],
    'user-type' => 'standard'//the user type
    ]);

    Auth::login($user);//Explicitly starts a new session for the user 
    return redirect('/homepage');
}

如果您要使用另一种形式进行管理员注册,则添加管理员用户的功能将大致相同;

public function createAdminUser(Request $request){
     //function to add the Admin user
     $user = User::create([
     'name' => $request['name'],
     'email' => $request['email'],
     'param' => $request['login-param'],
     'user-type' => 'admin'//the user type
    ]);

    Auth::login($user);//Explicitly starts a new session for the user
    return redirect('/adminpage');
}
  • 最后一部分是LoginController,您可以在其中使用attempt()函数对用户进行身份验证,并使用单个参数为他们启动新会话。

您将拥有这些功能

public function login(Request $request){

   if(Auth::attempt(['login-param' => $request->get('login-param'])){
        //we need to know who is logging in
        return $this->filterAndRedirect(Auth::user());
    }
}

private function filterAndRedirect(User $user){
  //the function to take care of the routing
  if($user->user-type == 'standard'){
      return redirect('/homepage');

  }else if($user->user-type == 'admin'){
      return redirect('/adminpage');
  } 
}

相关文档:Database Migration DocsLaravel Authentication Docs

建议:如果您是我,则将使用“角色/权限”,而不是在数据库中使用表行,我认为它更可靠。看看这个库,它有充分的文档记录并得到更新-> Laravel Permission By Spatie

编辑:此答案假设您正在使用标准的用户模型和身份验证控制器,因为那不是使用框架的全部目的吗?