我想在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";
}
}
}
答案 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');
}
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 Docs,Laravel Authentication Docs
建议:如果您是我,则将使用“角色/权限”,而不是在数据库中使用表行,我认为它更可靠。看看这个库,它有充分的文档记录并得到更新-> Laravel Permission By Spatie
编辑:此答案假设您正在使用标准的用户模型和身份验证控制器,因为那不是使用框架的全部目的吗?