8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

带有特殊字符的 Symfony 表单

Adil 2月前

58 0

我有一个 Symfony 6.4 Webapp 并使用 Form Builder。它运行正常,但我有一个外部数据源。(Active Directory)如果表单必须加载带有特殊字符的条目(在

我有一个 Symfony 6.4 Webapp 并使用 Form Builder。它运行正常,但我有一个外部数据源。(Active Directory)

如果表单必须加载带有特殊字符的条目(在德语中我们有\'ä\' \'ö\' \'ü\' 等等),我就会得到一个异常。

名称 group_with_special_characters 包含非法字符。名称应以字母、数字或下划线开头,且仅包含字母、数字、下划线 (\'_\')、连字符 (\'-\') 和冒号 (\':\')。

这是我在 FormularType 中的代码:

class AssignedGroupsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        foreach ($options['assignedGroups'] as $groupName => $groupDN) {
            $builder->add($groupName, CheckboxType::class, [
                'label' => $groupName,
                'value' => $groupDN,
                'required' => false,
            ]);
        }
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => null,
        ]);

        $resolver->setDefined(['assignedGroups']);
    }
}

在 GitHub 项目页面上,我发现了一个 已关闭的问题 ,可能的解决办法是设置 'expanded' => false,但这不起作用。因为我们生活在 2024 年,我想创建一个现代 Web 应用程序,所以我不能接受将字符从 \'ö\' 转换为 \'oe\',将 \'ä\' 转换为 \'ae\' 等等。

base.html.twig 模板以以下内容开头:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
[...]
帖子版权声明 1、本帖标题:带有特殊字符的 Symfony 表单
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Adil在本站《symfony》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Elen 2月前 0 只看Ta
    引用 1

    我有一个 Azure 静态 WebApp,它通过 Azure 应用注册配置了 AAD 身份验证。只有我组织的成员才能查看该站点。我的 staticwebapp.config...

    我有一个 Azure 静态 WebApp,它通过 Azure 应用注册配置了 AAD 身份验证。只有我组织的成员才能查看该网站。

    我的 staticwebapp.config.json 样子是这样的:

    {
        "routes": [
            {
                "route": "/*",
                "allowedRoles": [
                    "authenticated"
                ]
            }
        ],
        "responseOverrides": {
            "404": {
                "rewrite": "/404.html",
                "statusCode": 404
            },
            "401": {
                "statusCode": 302,
                "redirect": "/.auth/login/aad"
            }
        },
        "auth": {
            "identityProviders": {
                "azureActiveDirectory": {
                    "registration": {
                        "openIdIssuer": "https://login.microsoftonline.com/2e845e2f-11ff-48ec-9861-2fe771a9031d/v2.0",
                        "clientIdSettingName": "AZURE_CLIENT_ID",
                        "clientSecretSettingName": "AZURE_CLIENT_SECRET"
                    }
                }
            }
        },
        "globalHeaders": {
            "Cache-Control": "no-cache"
        }
    }
    

    当我导航时, https://example.com 一切都运行良好。

    但是当我导航到任何其他 URL 时,例如来自其他主页、聊天或类似内容的链接, https://example.com/important-informations 身份验证会将我重定向回主页 https://example.com .

    我的应用程序注册如下所示:

    如何配置应用程序注册以便在身份验证后重定向到请求的 URL?

    感谢您的帮助!

  • 我在 django 应用中使用 rest_framework_simplejwt 进行身份验证。对于注销,我想使刷新令牌过期。class LogoutView(APIView): permission_classes = (IsAuthenticated,) ...

    我在 django 应用中使用 rest_framework_simplejwt 进行身份验证。对于注销,我想使刷新令牌过期。

    class LogoutView(APIView):
        permission_classes = (IsAuthenticated,)
    
        def post(self, request, *args, **kwargs):
            try:
                refresh_token = request.data.get('refresh', None)
                token = RefreshToken(refresh_token)
                token.set_exp(lifetime=timedelta(seconds=0))
                return Response(status=status.HTTP_205_RESET_CONTENT)
            except Exception as e:
                print(e)
                return Response(status=status.HTTP_400_BAD_REQUEST)
    

    这按预期工作。当我执行 token.check_exp() ,它显示“已过期”。但是,我仍然可以使用它在此处生成新令牌:

    from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
    urlpatterns = [
        path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    ]
    
    

    这是为什么呢?但是,如果我将令牌列入黑名单而不是使其过期,这一切都会按预期工作。

  • 我目前正在使用 next-auth v5,并尝试将 accessToken 与用户信息一起存储在我的 auth.ts 文件中。但是,我在实现这一点时遇到了一些困难。我尝试过...

    我目前正在使用 next-auth v5,并尝试将 accessToken 与用户信息一起存储在我的 auth.ts 文件中。但是,我在实现这一点时遇到了一些困难。我尝试了各种方法,但到目前为止还没有成功。

    这是我的 auth.ts 文件:

      "use server"
    
    import {z} from "zod"
    import NextAuth, { AuthError, User } from 'next-auth';
    import Credentials from 'next-auth/providers/credentials';
    import { AuthConfig } from '@/app/auth.config';
    import axios, { AxiosResponse } from "axios";
    
    import type { DefaultSession } from 'next-auth';
    
    declare module 'next-auth' {
      interface Session {
        user: {
          accessToken: string;
        } & DefaultSession['user'];
      }
    
      interface User {
        accessToken: string;
      }
    }
    
    let authURL = process.env.NEXT_PUBLIC_AUTH_URL
    async function getUser(username: string,password:string): Promise<User | undefined> {
      let credentials = {
        username : username,
        password : password
      }
      try {
        const response : AxiosResponse<User> = await axios.post(`${authURL}/api/v1/User/Login`, credentials);
        return response?.data;
    } catch (error : any) {
        throw new Error("Failed to authenticate user.")
    }
    }
    
     //authenticate
    export async function authenticate(
      prevState: string | undefined,
      formData: FormData,
    ) {
      try {
        await signIn('credentials', formData);
      } catch (error) {
        if (error instanceof AuthError) {
    
              return 'Invalid Credentials.';
    
        }
        throw error;
      }
    }
    
    export const { auth, signIn, signOut } = NextAuth({
      ...AuthConfig,
      providers: [
        Credentials({
          async authorize(credentials) {
            const parsedCredentials = z
              .object({ username: z.string(), password: z.string().min(6)})
              .safeParse(credentials);
     
            if (parsedCredentials.success) {
              const { username, password} = parsedCredentials.data;
              const user = await getUser(username, password);
              if (!user)
                 return null;
    
              console.log("User => ", user)
              return {
                id: user.id,
                name: user.name,
                email: user.email,
                accessToken: user.accessToken 
              };
            }
    
            console.log('Invalid credentials')
     
            return null;
          },
        }),
      ],
      callbacks: {
        async jwt({ token, user }) {
          if (user) {
            token.accessToken = user.accessToken;
          }
          return token;
        },
        async session({ session, token }) {
          if (session.user) {
            session.user.accessToken = token.accessToken as string;
          }
          return session;
        },
      },
    
    });
    

    请帮忙,我犯了什么错误?如果有人能提供一些指导或建议,说明如何在 next-auth v5 中正确存储带有用户信息的 accessToken,我将不胜感激。任何示例或代码片段都对我理解实现这一点的正确方法非常有帮助。提前感谢您的帮助!

  • 我的一所大学找到了答案。

    您必须更改 staticwebapp.config.json .

    前:

     "401": {
                "statusCode": 302,
                "redirect": "/.auth/login/aad"
            }
    

    后:

     "401": {
                "statusCode": 302,
                "redirect": "/.auth/login/aad?post_login_redirect_uri=.referrer"
            }
    

    解决方案在这里找到: https://github.com/Azure/static-web-apps/issues/738

  • 不,很抱歉。这是一个包含组织内部信息的私人仓库,我无法分享。这是一个使用 mkdocs 在 github 操作中构建的静态站点。然后将 html、js、css 部署到静态 webapp。

返回
作者最近主题: