Php 我可以使用具有laravel身份验证结构的api进行身份验证吗?

Php 我可以使用具有laravel身份验证结构的api进行身份验证吗?,php,laravel,oauth-2.0,laravel-passport,Php,Laravel,Oauth 2.0,Laravel Passport,我想制作一个用于前端和管理面板的API,使用Laravel身份验证结构(带make:auth)和API身份验证(带Passport)来管理所有操作 我的“routes/api.php”文件 我的Auth\LoginController文件 <?php namespace App\Http\Controllers\Admin\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\Authenti

我想制作一个用于前端和管理面板的API,使用Laravel身份验证结构(带make:auth)和API身份验证(带Passport)来管理所有操作

我的“routes/api.php”文件

我的Auth\LoginController文件

<?php

namespace App\Http\Controllers\Admin\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * Show the application's login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    public function logout(Request $request)
    {
        auth()->logout();
        session()->flash('message', 'Some goodbye message');
        return redirect()->route('admin.login');
    }
}
我认为在Kernel.php api组中的$middlewareGroup中使用以下方法解决了上述错误; 我的app/Http/Kernel.php文件

Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'as' => 'api.admin.'], function () {
    Route::post('login', 'Auth\LoginController@login')->name('login');
    Route::post('logout', 'Auth\LoginController@logout')->name('logout');

    Route::group(['middleware' => 'auth:api'], function () {
        //
    });

});
未根据请求设置会话存储。错误已解决,但现在返回MethodNotAllowedHttpException

我可以用其他的方法解决这些问题,但我想用Laravel的auth standart

这可能吗


谢谢大家。

尝试将会话作为中间件单独添加到$middlewareGroup中

它应该包含\lighting\Session\Middleware\StartSession::class,

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],

        'sessions' => [
            \Illuminate\Session\Middleware\StartSession::class,
        ]
    ];
routes/api.php

Route::group(['middleware' => ['sessions']], function () {
    Route::resource(...);
});

这是可能的,尽管这比切换登录url要复杂一些。您将访问,以便用户可以使用其现有的电子邮件和密码凭据进行身份验证

您无需启用会话即可使其工作。基本的缺点是将电子邮件和密码发布到一个路由,该路由将请求代理到OAuth2服务器。您将把身份验证和刷新令牌中继回用户,然后用户负责使用
Authorization:Bearer longEncryptedTokenher…
头将访问令牌附加到每个后续请求

为了简化操作,Laravel提供了
CreateFreshAPITokes
中间件,该中间件将自动授权并刷新每个请求的令牌。你可以读到

使用
密码
授权和Guzzle请求令牌的示例:

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);

开始,您是否打算发出
post
注销请求?如果您只是使用
Route::get
注销,那么访问注销URL将使您注销。我的问题在于登录操作。我没有测试注销操作:)这不起作用。MethodNotAllowedHttpException错误仍然返回。谢谢。@FGDeveloper没有人使用api会话,但是使用了一个令牌,试试吧,谢谢,你太棒了。我从来没想过。你的回答对我很有帮助。。。现在我要用api解决注册用户、注销操作。
Route::group(['middleware' => ['sessions']], function () {
    Route::resource(...);
});
$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);