我有一个 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">
[...]
我目前正在使用 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,我将不胜感激。任何示例或代码片段都对我理解实现这一点的正确方法非常有帮助。提前感谢您的帮助!