vue.js Laravel Breeze和Laravel Sanctum如何安全地混合授权?

63lcw9qa  于 2023-01-02  发布在  Vue.js
关注(0)|答案(1)|浏览(107)

bounty已结束。回答此问题可获得+200声望奖励。奖励宽限期将在17分钟后结束。Александр Инженер希望引起更多人关注此问题。

我有一个使用Laravel REST API的移动的应用程序。此应用程序中的授权使用Laravel Sanctum Package。此架构工作得很好,但我不仅需要创建一个移动应用程序,而且还需要创建一个网站。由于我在网站的某些页面上有复杂的业务逻辑,我将无法使用纯PHP,我将不得不使用javascript和一个框架,比如Vue。我已经有了一个处理数据的REST API,但是问题是授权。关于安全性的问题,这种方法有多正确,是否有可能混合Laravel Breeze auth和Laravel Sanctum。我的想法是,在注册用户时,我也会为他创建一个访问令牌,但不是存储在客户端浏览器上,但是通过视图传递它。由于我是Laravel架构的新手,也许有更好的解决方案来解决这个问题?

//controller
use Illuminate\Support\Facades\Auth;
 
if (Auth::check()) {
    $url = "/api/product/url-for-auth-user"
    $token = $userAccessTokenFromDb;
}else{
    $url = "/api/product/url-for-anonymous-user"; 
    $token = "";
}

//blade webpage
  <div id="app">
        
            <div>
                //Vue component to which the link to REST API and token are passed
                <product url="{{$url}}"  token="{{$token}}"></product>
            </div>
  </div>
ioekq8ef

ioekq8ef1#

如果你使用预期的功能,那么在Breeze的routes中使用web.php和api.php,一切都会很好。当你用api登录用户时,也会设置会话cookie,反之亦然。我已经离开breeze一段时间了,它不像JetStream那样使用Sanctum吗?

Middlewares = [
    'auth:sanctum',
    config('jetstream.auth_session'),//which is AuthenticateSession::class
   ]

你可以在config/auth.php中为web和API返回设置不同的保护[

/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session"
|
*/

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
   
],

在config/sancup中,您可以将Web gaurd定义为默认值:

'guard' => ['web'],

这应该都已经为你设置好了!然后你就可以使用web.php中的中间件来处理使用sancum的web,而routes/api.php应该被用于路由,也就是你定义授权路由的地方:
//routes/web.php路由::中间件([ 'auth:sancum',])-〉组(函数(){

//protected routes
   

});


//api.php
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

breze已经在web.php中创建了这个,它的工作非常简单,我想不出如果你做得对,需要手动设置什么,我认为你只需要使用路径separate和使用middlewears,并按照laravel安装文档安装sancutum和breeze with breeze。

相关问题