Passport / axios不发布用户名密码

时间:2019-10-18 16:46:15

标签: php laravel axios

我正在尝试将POST的用户名和密码auth发送给Laravel / Passport,但它总是返回null

axios.post('http://localhost:8000/api/login', {
    withCredentials: true,
    auth: {
      email: 'agent@test.com',
      password: 'qwerty!@#$%^'
    }
  })
  .then(res => {
    console.log(res);
  })

PassportController.php

public function login(){
    if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
        $user = Auth::user();
        $success['token'] =  $user->createToken('MyApp')-> accessToken;
        return response()->json(['success' => $success], $this-> successStatus);
    }
    else{
        return response()->json(['email'=>request('email')], 401);
// I return email to see value
// return response()->json(['error'=>'Unauthorised'], 401);
    }
}

api.php

Route::post('login', 'PassportController@login');

我检查了很多次,感觉一切正常,但是由于某些原因数据没有发送到护照。

咨询日志:

  

POST http://localhost:8000/api/login 401(未经授权)

{email: null}
email: null

2 个答案:

答案 0 :(得分:2)

Laravel可能正在使用request访问POST数据的值。 axios.post方法的第二个参数是作为POST数据发送的对象,因此您可能只想将电子邮件和密码作为顶级密钥进行传递:

axios
  .post(
    "http://localhost:8000/api/login",
    {
      email: "agent@test.com",
      password: "qwerty!@#$%^"
    },
    { withCredentials: true }
  )
  .then(res => {
    console.log(res);
  });

我怀疑您通常会将认证与HTTP ("Basic") Authentication混淆在一起。 auth键是config对象的一部分,您可以将其作为第三个参数传递给axios.post,后者将仅对此进行控制。我认为这不是您要追求的,只是为了完整性而在此处添加。请注意,基本身份验证接受用户名和密码:

axios
  .post("http://localhost:8000/api/login", {}, {
      withCredentials: true,
      auth: {
          username: "agent@test.com",
          password: "qwerty!@#$%^"
      }
  })
  .then(res => {
    console.log(res);
  });

答案 1 :(得分:0)

最后,我解决了我的问题,问题是不需要通过credentials发送authaxios,因为从后端laravel接受发布数据而不是auth数据,所以我通过了{ {1}}和email通过表单数据不认证:

password

现在我在后端有了令牌。