使用 laravel 注册新用户作为 API
Posted
技术标签:
【中文标题】使用 laravel 注册新用户作为 API【英文标题】:Register new user with laravel as an API 【发布时间】:2016-01-20 20:25:33 【问题描述】:我正在构建一个依赖于单独的 Laravel API 的 Angular 应用程序,并且正在尝试注册一个新用户。
开箱即用,Laravel 5.1 Authentication 提供了许多方便的方法来注册用户,但它们适合在整个应用程序中使用 Laravel,即 blade template
前端。
我将此添加到我的 routes.php 文件中:
$router->controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController'
]);
路由/auth/register
是为我提供的,所以我尝试创建一个新用户:
来自 DHC:
很抱歉,Chrome API 不允许获取响应正文 重定向。
来自我的应用程序:
XMLHttpRequest 无法加载 http://dde.localhost/auth/register。这 请求被重定向到'http://dde.localhost/home',即 不允许用于需要预检的跨域请求。
我发现这是因为/auth/register
方法调用:postRegister()
in RegistersUsers.php
:
App\Http\Controllers\Auth\AuthController@postRegister
看起来像:
public function postRegister(Request $request)
$validator = $this->validator($request->all());
if ($validator->fails())
$this->throwValidationException(
$request, $validator
);
Auth::login($this->create($request->all()));
return redirect($this->redirectPath());
这有一个重定向,我猜它通常会重定向到刀片欢迎模板或其他东西。
如果我注释掉重定向,并简单地返回一个200 response
,
return Response::make('user created', 200);
我收到一个 CORS 错误:
http://dde.localhost/auth/register。请求的资源上不存在“Access-Control-Allow-Origin”标头。
这很奇怪,因为我通过 BarryCORS 中间件路由所有路由:
Route::group(['middleware' => 'cors'], function(\Illuminate\Routing\Router $router)
上面写着*
来源是允许的。
所以问题是:如何为仅将 Laravel 用于 API 的前端应用设置注册和身份验证
对于来自我的前端应用程序的每次调用,似乎都会对register
进行两次调用:
First:似乎第一个请求具有访问控制标头,并且它是一个 OPTIONS http 请求:
Request URL:http://dde.localhost/auth/register
Request Method:OPTIONS
Status Code:200 OK
//Response Headers:
access-control-allow-headers:ACCEPT, CONTENT-TYPE
access-control-allow-methods:GET, POST, PUT, DELETE
access-control-allow-origin:http://localhost:1337
Allow:GET,HEAD,POST,PUT,PATCH,DELETE
第二次:在第二次中,POST 最终被调用,并且带有有效载荷,但访问控制标头被剥离
Request URL:http://dde.localhost/auth/register
Request Method:POST
Status Code:500 Internal Server Error
//Response Headers: there are no access-control-allow methods attached
//Payload
username: "testname", password: "some random password"
这是为什么?
【问题讨论】:
你检查过响应是否真的有这些头吗? 最好使用基于令牌的身份验证。 @fos.alex 见上文编辑 plz 【参考方案1】:CORS 调用前的 OPTIONS 请求是标准的,就是检查服务器的响应头。
如果您收到 HTTP 500,那是因为服务器出了问题。如果仅针对 CORS,您将得到 40 倍的错误。 检查你的 laravel 应用日志,服务器端有问题。
【讨论】:
以上是关于使用 laravel 注册新用户作为 API的主要内容,如果未能解决你的问题,请参考以下文章