Registering always returns: "E-Mail address already in use"
kromonos opened this issue · comments
Ferdium-Server: ferdium/ferdium-server:latest
docker compose:
version: "3.8"
services:
ferdium-server:
#image: ferdium/ferdium-server:1.3.16
image: ferdium/ferdium-server:latest
container_name: ferdium-server
environment:
TZ: 'Europe/Berlin'
NODE_ENV: 'production'
#NODE_ENV: 'development'
APP_URL: 'https://<uri>'
DB_CONNECTION: 'pg'
DB_HOST: '127.0.0.1'
DB_PORT: 5432
DB_USER: '<un>'
DB_PASSWORD: '<pw>'
DB_DATABASE: '<db>'
DB_SSL: false
MAIL_CONNECTION: 'smtp'
SMTP_HOST: '<srv>'
SMTP_PORT: 465
MAIL_SSL: true
MAIL_USERNAME: '<un>'
MAIL_PASSWORD: '<pw>'
MAIL_SENDER: '<un>'
IS_CREATION_ENABLED: true
IS_DASHBOARD_ENABLED: true
IS_REGISTRATION_ENABLED: true
CONNECT_WITH_FRANZ: false
DATA_DIR: '/data'
HOST: 127.0.0.1
PORT: 3017
JWT_USE_PEM: true
CACHE_VIEWS: false
volumes:
- ferdium-database:/data
- ferdium-recipes:/app/build/recipes
restart: unless-stopped
network_mode: host
volumes:
ferdium-recipes:
ferdium-database:
Maybe because of missing recipes, which can't load, because of wrong Node version? See #84 (comment)
**** Generating recipes for first run ****
Cloning into 'recipes'...
npm WARN using --force Recommended protections disabled.
added 1 package in 2s
1 package is looking for funding
run `npm fund` for details
npm notice
npm notice New major version of npm available! 9.8.1 -> 10.2.3
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v10.2.3>
npm notice Run `npm install -g npm@10.2.3` to update!
npm notice
ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment (bad pnpm and/or Node.js version)
Your Node version is incompatible with "/app/recipes".
Expected version: 20.9.0
Got: v18.18.0
10:14AM 50 2023/11/08 10:14AM 2023/11/08 10:14AM 50 pid=146 hostname=<hn> name=ferdium-server err={"type":"Error","message":"/app/build/recipes/all.json: ENOENT: no such file or directory, open '/app/build/recipes/all.json'","stack":"Error: /app/build/recipes/all.json: ENOENT: no such file or directory, open '/app/build/recipes/all.json'\n at Object.openSync (node:fs:603:3)\n at Object.readFileSync (node:fs:471:35)\n at Object.readFileSync (/app/node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js:50:22)\n at RecipesController.list (/app/app/Controllers/Http/RecipeController.ts:53:32)\n at Injector.callAsync (/app/node_modules/.pnpm/@adonisjs+fold@8.2.0/node_modules/@adonisjs/fold/build/src/Ioc/Injector.js:124:30)","errno":-2,"syscall":"open","code":"ENOENT","path":"/app/build/recipes/all.json","status":500} msg=/app/build/recipes/all.json: ENOENT: no such file or directory, open '/app/build/recipes/all.json'
I have the same issue but with a "non-docker" setup, when trying to register a new account I always get the response "E-Mail address already in use". Dev tools show a 401 Unauthorized on /v1/auth/signup route
I face the same issue, with clean installation of latest version on docker, using mySQL/mariaDB database. Server fails to insert new users on database, throwing the same 401 error mentioned, although database connection is working properly since it gets populated with tables and the initial migration entries. Using the default SQLite database by adding the proper user and group on docker compose, it registers new users without any problems. Probably something is wrong with remote database management.
This is issue with table's users
(more specifically the column password
) schema in MySQL (I haven't tested postgres or sqlite).
This is the schema created by the application:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(80) NOT NULL,
`email` varchar(254) NOT NULL,
`password` varchar(60) NOT NULL,
`settings` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`settings`)),
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`lastname` varchar(80) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
)
As we can see the max size of the password
field is 60.
However, using strace command, I was able to retrieve the SQL insert application generates upon signup:
The resulting hashed password was 133 characters long and the insert just errored out.
Most important issue is probably that the error handling when interacting with DB is either missing or broken. And of course, the schema should be fixed as well.
For those that are running into this issue (while the schema hasn't been fixed by the maintainers), running following SQL should fix the issue:
ALTER TABLE `users` MODIFY `password` VARCHAR(254) NOT NULL;
This is issue with table's
users
(more specifically the columnpassword
) schema in MySQL (I haven't tested postgres or sqlite). This is the schema created by the application:
I haven't got any problems with postgres.
I myself was getting the nodejs warning, that v20.11.0 isn't enough for the recipes. Built the container myself wth the official Dockerfile which fixed this issue immediately. Since I'm no database pro the comment from @357up really solved the "E-Mail already in use" error for me as well! As a PostgreSQL user the command changes a little bit:
ALTER TABLE users ALTER COLUMN password TYPE varchar(254) ALTER COLUMN password SET NOT NULL;
Sad to see it's not fixed since November '23, since this is probably affecting all new instances. Will send a PR probably.