使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证

     2023-03-14     284

关键词:

【中文标题】使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证【英文标题】:Laravel client authentification with external Laravel passport lumen api 【发布时间】:2020-03-25 09:38:51 【问题描述】:

我一直在网上寻找,但我找不到任何方法。让我解释一下,我有一个 API(流明上的 Laravel 护照),我用 Postman 对其进行了测试,我用 oauth 获得了我的访问令牌,一切都很好。现在我有另一个 Laravel 应用程序,我想知道如何使用 API 登录来保留我的所有身份验证内容。我见过很多实际上检索 api_token 的应用程序,它们使用 'Auth::user()->where('api_token', $token)'。但我发现这是错误的,因为我不希望我的客户能够访问数据库,我希望对数据库的每个请求都由 API 处理。这可能吗?

【问题讨论】:

您是否使用 Laravel 密码进行身份验证 API? Laravel 护照是的,我想要 然后你必须在 api.php 路由中定义你的所有路由,并从你的前端应用程序中使用 axios 之类的东西发出 http 请求。 是的,我知道如何向我的护照 API 发出请求并收集资料。我想在我的前端应用程序中使用登录身份验证。我如何从外部登录 api 处理 laravel 使用会话 你的问题对我来说不是很清楚..我猜你正在构建一个 SPA ..你有两个应用程序一个在流明上运行,另一个在 Laravel 上运行你想要它们交换数据 .. 我建议您仅将 Laravel 用作 API 而忘记流明,因为拥有一个目标不同的应用程序并不值得 【参考方案1】:

假设您想通过 api 登录到 laravel 后端应用程序。确保安装 guzzle。

路由(api):Route::POST('/login', 'AuthController@login')

控制器:AuthController.php

public function login(Request $request)

    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required|string',
    ]);

   $http = new \GuzzleHttp\Client;

   try 
    $response = $http->post(config('services.passport.login_endpoint'), [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 'your client_id',
            'client_secret' => 'your client_secret',
            'username' => $request->email,
            'password' => $request->password,
            // 'scope' => '',
        ],
    ]);

    return $response->getBody();

     catch (\GuzzleHttp\Exception\BadResponseException $e) 
        if ($e->getCode() == 401) 
            return response()->json(['message' => 'This action can\'t be perfomed at this time. Please try later.'], $e->getCode());
         else if ($e->getCode() == 400) 
            return response()->json(['message' => 'These credentials do not match our records.'], $e->getCode());
        

        return response()->json('Something went wrong on the server. Please try letar.', $e->getCode());
    

在您的前端应用程序中,例如 vuejs,甚至 laravel 使用 vue 组件。如您所见,我使用的是 boostrap-vue,但可以随意使用常规的 html 元素

<template>
  <div>
    <form @submit.prevent="login()">
        <b-form-group label="Email">
          <b-input placeholder="E-Mail" class="ml-1" v-model="form.email" type="email" name="email" :class=" 'is-invalid': form.errors.has('email') "/>
          <has-error :form="form" field="email"></has-error>
        </b-form-group>

        <b-form-group>
          <div slot="label" class="d-flex justify-content-between align-items-end">
            <div>Password</div>
            <a href="javascript:void(0)" class="d-block small">Forgot password?</a>
          </div>
          <b-input v-model="form.password" type="password" name="password" :class=" 'is-invalid': form.errors.has('password') " />
            <has-error :form="form" field="password"></has-error>
        </b-form-group>

        <div class="d-flex justify-content-between align-items-center m-0">
          <b-check v-model="form.rememberMe" class="m-0">Remember me</b-check>
          <b-btn type="submit" variant="primary">Sign In</b-btn>
        </div>
      </form>
   </div>
  <template>

<script>


export default (
  name: 'pages-authentication-login-v2',
  metaInfo: 
    title: 'Login'
  ,

  state: 
      token: localStorage.getItem('access_token'),
  ,

  mutations: 
    login(state, token) 
      state.token = token
    ,
  ,

  data: () => (
      form: new Form(
          email: '',
          password: '',
      )
  ),

  methods: 

  login()
        this.form.post('/api/login')
        .then((response) =>
            const token = response.data.access_token
            localStorage.setItem('access_token', token)  
            // console.log(response);
            this.$router.push('/dashboard');
        )

        .catch((error)=>
            this.$toasted.error('Ooops! Something went wrong', 
                icon : "warning",
                theme: "bubble",
                closeOnSwipe: true,
                position: "top-right",
                duration : 5000,
                singleton: true,
            )
        );
  ,

  
)
</script>

【讨论】:

非常感谢,我现在真的明白了。此外,当登录成功时,我看到您保存访问令牌以供将来请求,但用户是否已登录?你如何用你的警卫保护你的路线?我如何告诉 laravel 我的用户已登录? 抱歉这么晚才回复。要告诉 laravel 用户已登录,您必须将用户 access_token 传递给 http 请求的标头。由于您已将 access_token 保存在 localStorage 上,因此您可以访问并将其放入标头。 Vuex 商店将是这种场景的最佳选择。如果您需要有关如何实现它的指导,请告诉我。 这正是我要理解的一些问题。现在为了使它工作,当检索到 access_token 时,我获取用户并使用 Auth::login($user)。我猜这是错误的,因为我使用数据库。我知道当我获得 access_token 时,我可以使用标头并执行 http 请求,但是我如何告诉 laravel 会话我使用中间件('auth')登录。

我如何测试 Laravel 护照 API 端点

】我如何测试Laravel护照API端点【英文标题】:HowdoitestLaravelpassportAPIendpoints【发布时间】:2019-09-1500:25:55【问题描述】:所以我想对我的API端点进行单元测试。我正在使用Laravel5.8,api身份验证是通过Passport完成的我有以下测试:p... 查看详情

如何在 laravel 中使用社交名流和护照创建 REST API

】如何在laravel中使用社交名流和护照创建RESTAPI【英文标题】:HowtocreateRESTAPIwithsocialiteandpassportinlaravel【发布时间】:2018-05-2402:15:01【问题描述】:我想创建RESTAPI,它将使用社交(谷歌)登录系统来验证用户进入系统。我正在使... 查看详情

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

】身份验证用户提供程序[passport]未使用laravel护照定义【英文标题】:Authenticationuserprovider[passport]isnotdefinedwithlaravelpassport【发布时间】:2019-03-2710:05:28【问题描述】:我在laravel中有一个api,我使用护照进行身份验证。在我的confi... 查看详情

Laravel 护照刷新令牌

】Laravel护照刷新令牌【英文标题】:Laravelpassportrefreshtoken【发布时间】:2019-05-1510:18:56【问题描述】:我正在使用Laravel5.5版,使用Passport进行身份验证。我已成功创建令牌并可以使用auth:api中间件访问它。但每当用户登录系统时... 查看详情

laravel 护照模块中个人访问令牌的过期时间

】laravel护照模块中个人访问令牌的过期时间【英文标题】:Expiretimeforpersonalaccesstokeninlaravelpassportmodule【发布时间】:2019-06-2205:02:56【问题描述】:我正在使用laravel为应用程序提供API服务。我使用个人访问令牌为用户进行API访问... 查看详情

Laravel 护照和 Vue 登录

】Laravel护照和Vue登录【英文标题】:Laravelpassport&Vuelogin【发布时间】:2019-01-2316:28:30【问题描述】:我已经在laravel中使用护照api进行了登录功能,我得到状态200,问题是我不知道如何登录用户并在成功后重定向到主页请求(... 查看详情

在 laravel 护照中注销用户

】在laravel护照中注销用户【英文标题】:Loggingouttheuserinlaravelpassport【发布时间】:2018-06-0710:19:18【问题描述】:我正在使用Laravel5.5进行API开发,我们如何使用laravel护照注销用户?它与网络中的注销相同还是有什么不同?提前... 查看详情

使用 laravel 护照从 api 路由注册新用户

】使用laravel护照从api路由注册新用户【英文标题】:registernewuserfromapirouteusinglaravelpassport【发布时间】:2017-05-2711:31:20【问题描述】:我已经安装了laravel5.3和passport包。我一步一步地按照文档我可以使用以下路由POST/oauth/token和... 查看详情

如何使用 Chrome 扩展程序获取 Laravel 护照令牌?

】如何使用Chrome扩展程序获取Laravel护照令牌?【英文标题】:HowtouseChromeextensiongetLaravelpassporttoken?【发布时间】:2019-11-2918:48:51【问题描述】:我正在使用Chrome扩展访问Laravel护照API。目前,Laravel护照API已设置并正在运行。我尝... 查看详情

Laravel 护照出现 401 Unauthenticated 错误

】Laravel护照出现401Unauthenticated错误【英文标题】:Laravelpassportgives401Unauthenticatederror【发布时间】:2018-05-1515:14:15【问题描述】:我正在使用Laravel护照进行API身份验证,当我将它与一个数据库一起使用时它可以完美运行,但在使... 查看详情

Laravel 护照公共 api 路线

】Laravel护照公共api路线【英文标题】:Laravelpassportpublicapiroutes【发布时间】:2019-06-2304:12:15【问题描述】:我正在尝试为我的api编写一个登录函数,该函数接受用户名和密码,然后给你一个密码授权令牌来发出api请求。调用时... 查看详情

laravel 6护照中未经授权的401错误

】laravel6护照中未经授权的401错误【英文标题】:Unauthorized401errorinlaravel6passport【发布时间】:2021-11-3013:58:54【问题描述】:我正在尝试使用laravel护照对用户进行身份验证。我遵循laravel护照文件中的每一步。但是当我访问受“aut... 查看详情

Laravel - 通过外部 API 进行身份验证

】Laravel-通过外部API进行身份验证【英文标题】:Laravel-AuthenticationviaexternalAPI【发布时间】:2016-11-0111:01:48【问题描述】:首先我是一个真正的Laravel初学者,所以我会尽量描述我的问题。我正在使用Laravel构建一个网站,但是有... 查看详情

Laravel 通过生成的令牌进行身份验证,无需护照和 jwt

】Laravel通过生成的令牌进行身份验证,无需护照和jwt【英文标题】:Laravelauthbygeneratedtokenwithoutpassportandjwt【发布时间】:2018-05-2810:12:09【问题描述】:我正在尝试通过在laravel5.5中使用md5加密方法从登录用户的用户名中检查生成... 查看详情

Laravel/流明 api 过滤器

】Laravel/流明api过滤器【英文标题】:Laravel/Lumenapifilter【发布时间】:2018-09-1212:09:32【问题描述】:最近我正在尝试让我的api过滤工作。我需要像这样过滤我的产品:http://localhost/search?feature_id=1,2,3,4,5...如果我只发送1个ID,一切... 查看详情

如何将 Laravel 护照用于 Auth 和 Lumen 作为 api

】如何将Laravel护照用于Auth和Lumen作为api【英文标题】:HowtouseLaravelpassportforAuthandLumenasapi【发布时间】:2017-10-0717:37:13【问题描述】:我正在研究使用laravel、laravelpassport、lumen和AngularJS开发一个使用API的应用程序我有3个域如下aut... 查看详情

使用 Laravel 使用外部 Laravel API

】使用Laravel使用外部LaravelAPI【英文标题】:UseLaraveltoconsumeanexternalLaravelAPI【发布时间】:2021-06-1909:20:01【问题描述】:我有两个Laravel站点,一个客户端和一个服务器。客户端连接到服务器,服务器(除其他外)为数据库提供RES... 查看详情

Laravel 5 通过外部 API 对用户进行身份验证

】Laravel5通过外部API对用户进行身份验证【英文标题】:Laravel5authenticateusersthroughexternalAPI【发布时间】:2016-04-1521:37:17【问题描述】:我想知道是否可以扩展内置身份验证以使用外部API对用户进行身份验证?我是Laravel新手,非... 查看详情