我开发了一个使用Laravel 5
的解决方案。它并不完全是在laravel上开发的。
API层位于另一个项目上,只有Web层使用laravel。
到目前为止,我一直在会话中存储auth详细信息,并使用基本方式处理经过身份验证的用户。
现在我一直在尝试将Web应用程序结构升级到laravel frontend & backend
模块。我面临的困难是使用providers
& guards
概念,因为它不直接与数据库交互。
到目前为止,我所做的是控制器,我正在检查用户的角色,并使用$_Session
进行身份验证。
如果能够启发我使用RESTful API和Laravel Auth警卫,那将非常有用。
<?php
namespace App\Http\Controllers;
require_once dirname(__DIR__, 3) . '/web_api/DependencyManager.php';
use DBHandlers;
use Facebook;
use Google;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
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();
}
答案 0 :(得分:0)
一个好的起点是阅读Passport
文档。
https://laravel.com/docs/5.5/passport
它可能不是您正在使用的,但它会让您很好地了解Laravel如何通过API处理身份验证和授权。
Laravel中的默认身份验证保护使用session
,但通常宁静的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