首页 > 其他分享 >Laravel10 简单使用 Auth 生成 Token 与登录并获取用户信息

Laravel10 简单使用 Auth 生成 Token 与登录并获取用户信息

时间:2023-04-22 11:36:33浏览次数:65  
标签:request Token Auth token Laravel10 input password email user

参考

  1. https://learnku.com/docs/laravel/10.x/authenticationmd/14876
  2. https://learnku.com/docs/laravel/10.x/sanctummd/14914
  3. https://learnku.com/articles/39646

环境

软件/系统 版本 说明
windows 10
php 8.2.5-nts-Win32-vs16-x64
composer 2.5.5
laravel 10.8.0
mysql 8.0.18

前置工作

https://learnku.com/docs/laravel/10.x/sanctummd/14914#installation

  1. 安装 composer require laravel/sanctum
  2. 发布配置与迁移文件 php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
  3. 将 Sanctum 的中间件添加到你的应用程序的 app/Http/Kernel.php 文件中的 api 中间件组中
    'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
       \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
       \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
    
  4. 数据库迁移 php artisan migrate (需要数据库链接)

完整代码 api.php

获取的令牌放在 Authorization 标头中传递,格式为 Bearer ${token}, 其中 token 为获取到的登录 token 字符串,如Bearer 6|Qyl8iYbMVf1eJOgPvfskxinNC8MnOwrnEf66RgoG

<?php

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Route;
use Illuminate\Validation\ValidationException;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/
// 使用 middleware('auth:sanctum') 包裹的就会自定验证用户登录与将用户信息放到 $request->user() 中
// 获取的令牌放在 Authorization 标头中传递,格式为 `Bearer ${token}`, 其中 token 为获取到的登录 token 字符串,如`Bearer 6|Qyl8iYbMVf1eJOgPvfskxinNC8MnOwrnEf66RgoG`
Route::middleware('auth:sanctum')->prefix("/user")->group(function () {
    Route::get('', function (Request $request) {
        return [
            // 所有token
            // $request->user()->tokens
            // 
            $request->user()
        ];
    });
    Route::delete('/login_out_all', function (Request $request) {
        return $request->user()->tokens()->delete();
    });
});


/**
 * 小程序版与密码版区别是小程序版可能没有密码。
 */
// 添加用户
Route::post('/add_user', function (Request $request) {
    // 密码版
    $user = new User();
    $user->name = $request->input("name");
    $user->email = $request->input("email");
    // 需要通过 Hash::make 加密后,才能使用 Auth::attempt 验证密码正确性
    $user->password = Hash::make($request->input("password"));
    $user->save();
    // // 小程序版
    // $user               = new User();
    // $user->phone_number = $request->input("phone_number");
    // // openId 需要去微信获取,这里只是简单演示
    // $user->open_id      = $request->input("open_id");
    // $user->save();

    return $user;
});
// 用户登录
Route::post('/login_user', function (Request $request) {
    // // 密码版验证
    $email      = $request->input("email");
    // password 为未加密的用户密码,如:123456
    $password   = $request->input("password");
    // 可以添加自定义认证字段,如:active=1
    // if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    if (!Auth::attempt(['email' => $email, 'password' => $password])) {
        throw new \Exception("用户验证失败");
    }
    // 通过验证后就会自动登录,$request->user() 就可以获取到用户信息了。
    return [
        'token' => $request->user()->createToken("USER_TOKEN"),
        'user'=> $request->user()
    ]; 
    // // 密码版验证 结束

    
    // // 小程序版验证
    // $user = User::where("email", $request->input("email"))->firstOrFail();
    // Auth::login($user);
    // $token = $request->user()->createToken("USER_TOKEN");
    // return [
    //     'token' => $token->plainTextToken, 
    //     'user'=> $request->user()
    // ];
    // // 小程序版验证 结束
});

标签:request,Token,Auth,token,Laravel10,input,password,email,user
From: https://www.cnblogs.com/xiaqiuchu/p/17342669.html

相关文章

  • session,cookie,token,jwt
    cookie,session,token,jwtCookiecookie是为了解决HTTP在状态管理上的不足,HTPP是无状态协议。目的是让服务端知道客户端的身份。cookie储存在客户端。Sessionsession是记录服务器和客户端会话状态的机制session是基于cookie实现的,session存储在服务器端,sessionid储存在客户端的co......
  • k3s 基础 —— 配置 kubernetes-dashboard 的 token 过期时间
    拉取配置到本地:kubectlgetdeploykubernetes-dashboard-nkubernetes-dashboard-oyaml>dashboard-deploy.yaml增加参数:spec:containers:-args:---auto-generate-certificates---namespace=kubernetes-dashboard---to......
  • 【汇智学堂】JSTL标签库-循环标签(forTokens)
    <c:forTokens>标签与JAVA语言中StringTokenizer类的作用相似,可以用指定的分隔符分离一个字符串,根据分隔的数量确定循环的次数。<%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c&......
  • Flink启动报错:/bin/config.sh: line 32: syntax error near unexpected token
    flink启动报错xxx@ssss:/xxx/flink-1.15.2/bin>shstart-cluster.sh/xxx/flink-1.15.2/bin/config.sh:line32:syntaxerrornearunexpectedtoken`<'/xxx/flink-1.15.2/bin/config.sh:line32:`done<<(find"$FLINK_LIB_DIR"!-ty......
  • 解析token中的信息 ,比如token中的userid
    介绍某些情况我们需要解析token中的信息,比如token中的用户id,方便我们后面用于查询。上一篇我们讲了如何生成token,登录鉴权,怎么验证接口权限的。接下来我们讲讲如何获取token中的信息基本思路:在过滤器中将token中的用户信息存放到context.HttpContext.User或者Thread.CurrentP......
  • git执行push操作时报错:remote: xxx: Incorrect username or password (access token)
    问题:最近用gitpush项目到gitee时报错,提示信息如下:remote:xxx:Incorrectusernameorpassword(accesstoken)fatal:Authenticationfailedfor'https://gitee.com/xxx/xxx.git/'想了一下,原来是几天前我把gitee的密码给改了,所以原先git存留的密码就失效了解决方案清......
  • SpringBoot + WebFlux + Spring Security ,SecurityContextHolder.getContext().getA
    解决方案直接在Controller接口方法参数中写入org.springframework.security.core.Authentication,如下:@GetMapping(path="/test")publicMono<Response<?,?>>test(Authenticationauthentication){returnMono.just(ResponseUtil.success(authentica......
  • token的作用
    1️⃣客户端使用用户名和密码请求登录。2️⃣服务端收到请求,验证用户名和密码。3️⃣验证成功后,服务端会生成一个token,然后把这个token发送给客户端。4️⃣客户端收到token后把它存储起来,可以放在cookie或者LocalStorage(本地存储)里。5️⃣客户端每次向服务端发送请求的时候都需要带上服......
  • k8s基于RBAC权限生成config和token
    一、背景Kubernetes主要通过APIServer对外提供服务,对于这样的系统来说,如果不加以安全限制,那么可能导致请求被滥用,甚至导致整个集群崩塌。Kubernetes中提供了良好的多租户认证管理机制,RBAC正式其中重要的一个,今天我们来详细聊聊K8s中的RBAC。二、相关概念2.1在RBAC模型里面......
  • session,coolie,token区别
    一.seesion、cookie、token区别1.session和cookie的区别1.1、cookie数据存放在客户浏览器,session数据存放在服务器1.2、cookie不是很安全,别人可以分析存在在本地的cookie进行cookie欺骗,考虑到安全应该使用session1.3session会在一定时间内(有一个有效期)保存在服务器上,当访问增多......