如何在项目中同时使用网络身份验证器和API身份验证器

时间:2019-05-05 18:24:31

标签: php laravel authentication

我已经开发了使用护照身份验证的API,该API用于本机应用程序。

现在,我必须为Admin用户开发一些Web功能,已经制作了Admin模型并进行了迁移,但是我不知道如何仅对Admin模型启用Web身份验证。我正在寻找一些教程,但发现的所有内容都是关于laravel默认身份验证的,并且我已经将User模型用于护照身份验证。

请帮助我!

4 个答案:

答案 0 :(得分:1)

您可以在users表内创建一列,而不是创建Admin模型,将其称为帐户类型。然后在您的Laravel代码中,您可以执行

if (Auth::user()->account_type === 'admin') {
  // your code.
}

在您的API或WEB中,您只需检查多种类型并相应地进行路由

刀片式语法(针对您的前端)

@if ( {{Auth::user()->account_type}} === 'admin')

@else  

@endif

答案 1 :(得分:1)

有几种方法可以解决此问题。

1-如果您只有几个管理员用户,则可以使用默认身份验证内容将其添加为普通用户,并添加在auth中间件之后运行的路由中间件。 代码:

//Create this at app/Http/Middleware/Admin.php
namespace App\Http\Middleware;

use Illuminate\Auth\AuthenticationException;

class Admin
{
    public function handle($request, \Closure $next)
    {
        $admins = [1,32,23];//place your admins IDs here
        //I've hardcoded the admin ids, but you can also check them from a table Admins::all() or column such as auth()->user()->is_admin
        if(!in_array(auth()->user()->id,$admins))
            return throw new AuthenticationException('You are not allowed here');
        return $next($request);
    }
}

然后将中间件声明添加到$ routeMiddleware中的app / Http / Kernel.php中。

'admin' => App\Http\Middleware\Admin::class,

并在您的管理路线上使用

Route::middleware(['auth','admin'])->group(function () {
    //admin routes here
}

2-您也可以替换所有身份验证步骤以使用自定义模型,我已经完成了一两次,但是这样做有很多副作用,根本不值得。但是,如果您选择这样做,则可以通过Authenticable扩展您的管理类开始

use Illuminate\Foundation\Auth\User as Authenticatable;

然后,您还必须复制app / Http / Auth下的所有文件,重写一堆内容以使用您的自定义类,然后复制所有视图以进行登录,并重置密码和其他东西。

相信我,不值得。我会选择第一种。

答案 2 :(得分:0)

我在Laravel Echo问题中找到了此评论,但根本无法复制。 我尝试创建一个名为Broadcast的新中间件,并相应地执行以下操作:     class BroadcastMiddleware(){

public function handle() {
$web = Auth::guard('web')->user();
if ($web) {
    return response()->json($web);
}

$api = Auth::guard('api')->user();
if ($api) {
    return response()->json($api);
}
return response()->json('Unauthorized.', 500);
}}

还尝试为/ broadcast / auth设置路由

Route::post('/realtime/auth', function(){
return true;
})->middleware('broadcast');

但是,使用上面的代码,它将返回用户模型;但是相反,Laravel的广播/身份验证返回的内容类似于:auth:“ 374f7ff42b7da877aa35:c29addedec281b418331a61dc3cfc74da8b108222565fa4924a8 ...”

答案 3 :(得分:0)

我遇到了同样的问题,并且尝试了几种不同的方法,但是这种方法似乎是最好的。您可以在此处查看该教程:

https://medium.com/employbl/easily-build-administrator-login-into-a-laravel-5-app-8a942e4fef37

完成此操作后,很容易弄清楚如何进行注册也必须首先由管理员批准。另外,您应该关注本教程的作者-他有很多好东西!

相关问题