Laravel 5 auth guard with RESTful API



我开发了一个使用Laravel 5的解决方案。它并不完全是在拉拉维尔上开发的。

API 层驻留在另一个项目上,只有 Web 层使用 laravel。

到目前为止,我一直在会话中存储身份验证详细信息,并使用基本方法来处理经过身份验证的用户。

现在我一直在尝试将 Web 应用程序结构升级到laravel frontend & backend模块。我面临的困难是使用providers&guards概念,因为它不直接与数据库交互。

到目前为止,我所做的是控制器,我正在检查用户的角色,并使用$_Session进行身份验证。

如果有人能启发我将RESTful API与Laravel Auth守卫一起使用,那将非常有帮助。

注册控制器

<?php
namespace AppHttpControllers;
require_once dirname(__DIR__, 3) . '/web_api/DependencyManager.php';
use DBHandlers;
use Facebook;
use Google;
use IlluminateHttpRequest;
use IlluminateSupportFacadesMail;
use SessionManager;
use Session;
class RegisterController extends Controller
{
public function mRegister($ref = null)
{
$session = new SessionManager();
$db = new DBHandlers();

isset($ref) && $ref == 'google' ? $registered_via_google = true : $registered_via_fb = true;
if (isset($_SERVER['QUERY_STRING'])) {
if (isset($ref)) {
if (strcmp($ref, "facebook") == 0) {
$registered_via_fb = true;
} else {
$registered_via_google = true;
}
}
}

if (isset($registered_via_fb) && $registered_via_fb) {
//  echo 'Facebook';
try {
$fb = new Facebook();
$fb->mProcess();
//   echo $_GET['code'];
//     print_r($fb->getAcessToken());
$fb_access_token = (string)$fb->getAcessToken();
//  echo $fb_access_token;
if (isset($fb_access_token) && $fb_access_token != '' && !empty($fb_access_token)) {
$result = $db->mFBLogin($fb_access_token);
$session->LogUserIn($result);
} else {
$registration_error = true;
}
} catch (Exception $e) {
$registration_error = true;
}
} 
}
public function mLogout()
{
Session::flush();
redirect()->route('index')->send();
die();
}

一个好的起点是通读Passport文档。

https://laravel.com/docs/5.5/passport

它可能不是您正在使用的,但它可以让您很好地了解Laravel如何通过API处理身份验证和授权。

Laravel中的默认身份验证保护使用session但通常Restful API是无状态的,因此您需要管理身份验证令牌。这是通过使用auth:api中间件完成的。

Passport 是一个很好的软件包,作为一个成熟的 OAuth2 服务器,那么对于 JWT,我会推荐:

https://github.com/tymondesigns/jwt-auth

更新:

Laravel应用程序中是否有一个users表,您可以将api登录与它相关联?如果是这样,那么在您的情况下,您可以使用web防护装置并session驱动程序。进行身份验证并收到响应后,查询用户,然后手动将其登录到 Laravel:

// use the same email address here they used to login to the api.
$user = User::where('email', 'someone@somewhere.com')->first();
auth()->login($user);

从那时起,您将使用web中间件组来管理授权请求。

如果您真正需要自定义解决方案,Laravel文档有一个很好的示例,如何实现您自己的解决方案:

https://laravel.com/docs/5.5/authentication#adding-custom-guards

最新更新