Laravel 5使用RESTful API进行身份验证

时间:2018-01-21 08:05:13

标签: laravel laravel-5 laravel-authorization

我开发了一个使用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();
    }

1 个答案:

答案 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