在laravel中使用外部API登录

wecizke3  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(192)

当前我尝试使用用户名和密码从外部API https://fakestoreapi.com/auth/login登录HTTP客户端,如果登录成功,将收到令牌。
现在我必须做一个错误消息,并返回到登录表单,如果用户名和密码错误。但我得到的仍然是一个错误,从laravel像尝试读取属性“令牌”空。请帮助我,我是一个初学者。
这是我的控制器代码。

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;

class MasukController extends Controller
{
    public function masuk()
    {
        return view('login');
    }

    public function cek(Request $request)
    {
        $request->validate([
            'username' => 'required',
            'password' => 'required',
        ]);

        // Send a POST request to the API
        $response = Http::post('https://fakestoreapi.com/auth/login', [
            'username' => $request->input('username'),
            'password' => $request->input('password'),
        ]);

        // Decode the response
        $data = json_decode($response);

        // Get the token from the response
        $token = $data->token;

        // Redirect to the dashboard page
        if (is_null($token)) {
            Session::flash('error', 'Error: Token is null');

            // Redirect the user back to the previous page
            return redirect()->back();
        } else {
            session(['token' => $token]);
            return redirect('/');
        }
    }
}

我想显示错误消息,如果用户名和密码不匹配,在登录形式。

7hiiyaii

7hiiyaii1#

也许你可以在执行post方法时使用GuzzleHttp\Client
例如使用下面的GuzzleHTTP:

use GuzzleHttp\Client;

    public function PostData(Request $request)
    {
        $client = new Client();
        $username = $request->username;
        $password = $request->password;
            $url = 'https://yoururl.example'

        $params = [
            "username" => $username,
            "password" => $password
        ];

        $response = $client->request('POST', $url, [
            'json' => $params
        ]);

        return json_decode($response->getBody());
    }

然后可以转储& die / dd响应-〉getBody()以获取输出

gojuced7

gojuced72#

您正在尝试对整个$response对象进行json_decode,这将失败。有更简单的方法可以完成此操作:
获取所有响应数据的数组:

$data = $response->json();

仅获取令牌:

$token = $response->json('token')

相关问题