指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
  • symfony项目列表

    • 第一课:简介
    • 第二课:舞台搭建
    • 第三课:登陆模块

      • 模块介绍
      • 详细配置
      • 相关表迁移
      • 测试登陆功能
      • 自定义handler

由于使用了composer包,基本上不需要单独写认证的逻辑, 主要是一些配置

1.相关包的配置
my_project/
├── bin/
├── config/
│   ├── packages/
│        └── lexik_jwt_authentication.yaml
│        └── gesdinet_jwt_refresh_token.yaml
2.lexik_jwt_authentication 配置如下
具体内容:
lexik_jwt_authentication:
    secret_key: '%kernel.project_dir%/config/jwt/private.pem'
    public_key: '%kernel.project_dir%/config/jwt/public.pem'
    pass_phrase: '%env(JWT_PASSPHRASE)%'
    token_ttl: 3600
3.gesdinet_jwt_refresh_token 配置如下
具体内容:
gesdinet_jwt_refresh_token:
  refresh_token_class: App\Entity\RefreshToken #指定用哪个实体来保存 refresh token(自定义的)
  ttl: 86400 #默认这个refresh_token有效期是一个月,这里配置为1天
  ttl_update: true #每次使用 refresh token 成功刷新后,自动延长它的过期时间, 顺便说一下 ttl_update: true 的效果 当客户端用 refresh token 请求 /api/token/refresh 时,如果刷新成功,会自动把这个 refresh token 的 valid 时间 续期,也就是重新+1小时(或+1天,看你的 ttl 配置)。如果 ttl_update: false,那么 refresh token 用一次就快过期了(不续命)。
3.路由配置
在~/config/routes.yaml下添加如下配置:

api_login_check:
    path: /api/login_check
api_refresh_token:
    path: /api/token/refresh
4.firewalls 配置
在~/config/packages/security.yaml下添加如下配置:

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                # 这里定义了 property: email, 那么整个登陆过程就不会调用 User Entity 下的 getUserIdentifier, 实际上是 UserRepository 下的 loadUserByIdentifier, 而是直接使用 email 作为用户登陆的唯一标识
                # 根据实际开发需求,需要在 loadUserByIdentifier 下,自定义用户登录库的验证逻辑(拦截验证)
                # 这个配置告诉 Symfony 应该用哪个字段来查找用户, 两种方式 1.通过直接定义字段的凡是,比如这里的 email,2. 通过 loadUserByIdentifier
                # property: email
    firewalls:
        login:
            pattern: ^/api/(login|token/refresh)
            stateless: true
            json_login:
                check_path: /api/login_check
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
            refresh_jwt:
                check_path: /api/token/refresh
                provider: app_user_provider
        api:
            pattern: ^/api
            stateless: true
            jwt: ~
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        - { path: ^/api/(login|token/refresh), roles: PUBLIC_ACCESS }
        - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }
Prev
模块介绍
Next
相关表迁移