Laravel 两个 Laravel 项目之间的通行证
Laravel Passport between two Laravel projects
我有一场大战。
我正在尝试创建两个 Laravel 网站。一个用于前端,一个用于后端。后端将向前端提供 API 生成的信息。对我来说唯一困难的一件事是为前端创建 Auth 和 Guard。网上有很多关于如何在一个 Laravel 项目中制作系统的教程,但不是在两个项目中,在不同的主机上。
我通过此文档设置后端:https://laravel.com/docs/5.5/passport
我测试了一下,一切正常。
问题是与前端兼容。我想摆脱数据库身份验证并使用护照的令牌:/
有没有人有一些项目或教程,我可以看看?
谢谢!
在前端创建一个 users(id, created_at, updated_at)
table 和一个 User
模型
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Models\Helpers\ModelHelper;
use Auth;
class User extends Authenticatable
{
//here $userData we will get from backend server
public static function createAuth($userData){
$user = new User();
$user->name = $userData['name'];
//all other fields
Auth::login($user);
return $user;
}
}
在此之后在前端创建一个登录操作并在后端服务器创建一个登录然后在后端服务器创建个人访问令牌并且return它作为json 回应
后端登录操作
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['user'] = $user;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
前端登录操作
public function login(Request $request)
{
$http = new GuzzleHttp\Client;
$response = $http->post('http://backend.local/api/login', [
'headers' => [
'Accept' => 'application/json',
],
'form_params' => [
'email' => 'username@example.vom',
'password' => '123',
]
]);
$info = json_decode((string) $response->getBody(), true);
$request->session()->put('authUser', $info['success']['user']);
\App\User::createAuth($info['success']['user']);
return redirect('/');
}
创建自定义中间件RemoteAuth
namespace App\Http\Middleware;
use Illuminate\Auth\AuthenticationException;
use Closure;
use Auth;
use App\User;
class RemoteAuth
{
public function handle($request, Closure $next)
{
if (!empty(session('authUser'))) {
$user = $request->session()->get('authUser');
User::createAuth($user);
return $next($request);
}
return redirect('/login');
}
}
在 protected $routeMiddleware
部分的 Kernel.php
中注册此中间件。
'remoteAuth' => \App\Http\Middleware\RemoteAuth::class
现在在 Route
中使用这个 remoteAuth
中间件
Route::middleware('remoteAuth')->get('/test', function (Request $request) {
return 'Protected page';
});
希望它能给你一些想法。
我有一场大战。
我正在尝试创建两个 Laravel 网站。一个用于前端,一个用于后端。后端将向前端提供 API 生成的信息。对我来说唯一困难的一件事是为前端创建 Auth 和 Guard。网上有很多关于如何在一个 Laravel 项目中制作系统的教程,但不是在两个项目中,在不同的主机上。
我通过此文档设置后端:https://laravel.com/docs/5.5/passport 我测试了一下,一切正常。
问题是与前端兼容。我想摆脱数据库身份验证并使用护照的令牌:/
有没有人有一些项目或教程,我可以看看? 谢谢!
在前端创建一个 users(id, created_at, updated_at)
table 和一个 User
模型
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Models\Helpers\ModelHelper;
use Auth;
class User extends Authenticatable
{
//here $userData we will get from backend server
public static function createAuth($userData){
$user = new User();
$user->name = $userData['name'];
//all other fields
Auth::login($user);
return $user;
}
}
在此之后在前端创建一个登录操作并在后端服务器创建一个登录然后在后端服务器创建个人访问令牌并且return它作为json 回应
后端登录操作
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['user'] = $user;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
前端登录操作
public function login(Request $request)
{
$http = new GuzzleHttp\Client;
$response = $http->post('http://backend.local/api/login', [
'headers' => [
'Accept' => 'application/json',
],
'form_params' => [
'email' => 'username@example.vom',
'password' => '123',
]
]);
$info = json_decode((string) $response->getBody(), true);
$request->session()->put('authUser', $info['success']['user']);
\App\User::createAuth($info['success']['user']);
return redirect('/');
}
创建自定义中间件RemoteAuth
namespace App\Http\Middleware;
use Illuminate\Auth\AuthenticationException;
use Closure;
use Auth;
use App\User;
class RemoteAuth
{
public function handle($request, Closure $next)
{
if (!empty(session('authUser'))) {
$user = $request->session()->get('authUser');
User::createAuth($user);
return $next($request);
}
return redirect('/login');
}
}
在 protected $routeMiddleware
部分的 Kernel.php
中注册此中间件。
'remoteAuth' => \App\Http\Middleware\RemoteAuth::class
现在在 Route
中使用这个remoteAuth
中间件
Route::middleware('remoteAuth')->get('/test', function (Request $request) {
return 'Protected page';
});
希望它能给你一些想法。