Laravel 5.5自定义身份验证问题

时间:2019-08-21 06:57:54

标签: laravel authentication

我要实施第三方授权。

我发送帖子请求(使用Guzzle)并按预期方式获得回复。

CustomAuthController.php

class CustomAuthController extends Controller {

public function auth(Request $request) {
    $username = $request->input('username');
    $password = $request->input('password');


    $client = new Client();
    $url = 'http://...................../login';

    $login_request = $client->post($url, [GuzzleHttp\RequestOptions::JSON => ['login' => $username, 'password' => $password,], 'headers' => ["accept-encoding" => "gzip, deflate"], 'decode_content' => false]);

    $response_status = $login_request->getStatusCode();
    $response_header = $login_request->getHeaders();
    $response_body = $login_request->getBody()->getContents();
    $response = json_decode($response_body);

    if($response_status == 200) {
        Auth::login($response->Login, true);
    }

}
}

auth.php

'guards' => [
    'web' => [
        'driver' => 'token',
        'provider' => 'users',
    ],

但是我得到一个错误:

Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, string given.

我需要帮助来解决它。

2 个答案:

答案 0 :(得分:0)

如错误所示,您的$response变量是字符串,在login()方法中不接受该变量作为参数。分配dd($reponse)后使用Illuminate\Contracts\Auth\Authenticatable,检查变量,并将其更改为使用期望的参数,该参数是//css TagsDropdown { display: none; } .img-wrapper:hover TagsDropdown { display: block; } // html <div class="img-wrapper"> <img className={classes.img} src={photo.src} /> <div className={classes.tagContainer}> <Tag tag={tag} key={tag} /> <TagsDropdown/> </div> </div> 的实例。

答案 1 :(得分:0)

由于Auth::login()希望将Authenticateable模型作为第一个参数,并且您的$response->Login是用户名,因此您应该首先检查用户。

if($response_status == 200) {
    $user = User::whereUsername($response->Login)->firstOrFail();
    Auth::login($user, true);
}