Sziasztok. Tud valaki mondnai olyan progit amit saját ubuntu szerverre lehet telepíteni (Csak saját) Tehát nem mint a discord. É lehessen fileokat küldeni chat közös vagy privát. Esetleg hívás. Köszi.

aaa0 És csak mongodb-s szerverre megy fel vagy mehet nginx apache mysqldb-re is?
Per pillanat nginx a főfutóm és szerverpanel alatt apache - mysqldb imscp panel fut.

*** System restart required ***
Last login: Tue Feb 21 19:25:51 2023 from 192.168.9.96
root@panel:~# snap install rocketchat-server
rocketchat-server (5.x/stable) 5.4.3 from Rocket.Chat (rocketchat✓) installed
root@panel:~# systemctl status snap.rocketchat-server.rocketchat-server.service
● snap.rocketchat-server.rocketchat-server.service - Service for snap application rocketchat-server.rock
Loaded: loaded (/etc/systemd/system/snap.rocketchat-server.rocketchat-server.service; enabled; vendor
Active: active (running) since Tue 2023-02-21 19:58:54 CET; 1min 6s ago
Main PID: 19568 (start_rocketcha)
Tasks: 12 (limit: 4915)
CGroup: /system.slice/snap.rocketchat-server.rocketchat-server.service
├─19568 /bin/bash /snap/rocketchat-server/1539/bin/start_rocketchat.sh
└─19724 node /snap/rocketchat-server/1539/main.js

febr 21 19:58:54 panel systemd[1]: Started Service for snap application rocketchat-server.rocketchat-ser
febr 21 19:58:54 panel rocketchat-server.rocketchat-server[19568]: node $SNAP/main.js
febr 21 19:59:26 panel rocketchat-server.rocketchat-server[19568]: strict mode: use allowUnionTypes to a
febr 21 19:59:31 panel rocketchat-server.rocketchat-server[19568]: LocalStore: store created at
febr 21 19:59:31 panel rocketchat-server.rocketchat-server[19568]: LocalStore: store created at
febr 21 19:59:42 panel rocketchat-server.rocketchat-server[19568]: MessageType.render is deprecated. Use
febr 21 19:59:44 panel rocketchat-server.rocketchat-server[19568]: {"level":40,"time":"2023-02-21T18:59:

és nem jön be: http://localhost:3000/home

A webhely nem érhető elA(z) localhost visszautasította a csatlakozást.
Próbálja ki a következőket:

A kapcsolat ellenőrzése
A proxy és a tűzfal ellenőrzése
ERR_CONNECTION_REFUSED

De ha felraktam akkor miért nem jön be?

Siker vagy csalodás?

Csalódás.
Leszedtem egy másik cuccot azzal annyi gondom van,hogy megy tehát megcsináltam automata futásra Illetve kiszedtem belőle a google recapchat mysql összelőttem.
Be is regisztráltam meg is van az user táblában. De belépni nem enged.... csak pörög ha F5 akkor újból belépést kér...

Ez a file amire hivatkozik:

const crypto = require('crypto');
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');

const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');

const signToken = id => {
    return jwt.sign({ id: id }, process.env.JWT_SECRET, {
        expiresIn: process.env.JWT_EXPIRES_IN
    });
}

const createSendToken = (user, statusCode, res, msg) => {
    const token = signToken(user.id);
    const cookieOptions = {
        expires: new Date(
            Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
        ),
        httpOnly: true
    };
    if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
    res.cookie('jwt', token, cookieOptions);
    res.cookie('user_id', user.id, cookieOptions);

    // Remove password from output
    user.password = undefined;
    return res.status(statusCode).json({
        status: 'success',
        message: msg,
        token,
        data: {user}
    });
}

function getQueryResult(query) {
    return new Promise((resolve) => {
        dbConnect.query(query, function (err, result) {
          if (err) throw err;
          if (result){
            resolve(result)
          }
        });
    })
  }

/**
 * Sign Up
 */
exports.signup = catchAsync(async (req, res, next) => {
    var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
    const invalidEmail = await getQueryResult(selectQuery)

 // input field validation
   // if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {return res.status(200).json({status: 'fail',message: 'Please select captcha'});}else 

   if (req.body.name === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Neved wazze...'
        });
    }else if (req.body.email === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Email címed paraszt'
        });
    }else if (req.body.password === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Jelszavad!'
        });
    }else if (req.body.location === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Ehune laksz.'
        });
    }else if(invalidEmail.length > 0){
        return res.status(200).json({
            status: 'fail',
            message: 'Email találj ki mást.'
        });
    }

    // Put your secret key here.
    var secretKey = process.env.CAPTCHA_SECRET;
    // req.connection.remoteAddress will provide IP address of connected user.
    var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
    // Hitting GET request to the URL, Google will respond with success or error scenario.
    request(verificationUrl, async (error, response, body) => {
        body = JSON.parse(body);
    });

    await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
        if (err) throw err;
        // 4) Log the user in, send JWT
        return res.status(200).json({
            status: 'success',
            message: 'Reset Password Successfully'
        });
    });

});

/**
 * Logout
 */
exports.logout = async (req, res) => {
    res.clearCookie('user_id');
    res.clearCookie('jwt');
    res.status(200).json({ status: 'success' });
}

/**
 * Login Page
 */
exports.login = async (req, res) => {
    res.status(200).render('login');
};

/**
 * Register Page
 */
exports.register = async (req, res) => {
    res.status(200).render('register');
};

/**
 * Forgot password Page
 */
exports.forgot_password = async (req, res) => {
    res.status(200).render('forgot_password');
};

/**
 * Forgot password Page
 */
exports.reset_password = async (req, res) => {
    res.status(200).render('reset_password');
};

/**
 * Index Page
 */
exports.index = async (req, res) => {
    console.log("aa", req.cookies.jwt)
    if (req.cookies.jwt == undefined) {
        return res.status(200).render('login');
    } else
        res.status(200).render('index', { user: req.user })
};

`

Ez meg a gyári:

`const crypto = require('crypto');
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');

const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');

const signToken = id => {
    return jwt.sign({ id: id }, process.env.JWT_SECRET, {
        expiresIn: process.env.JWT_EXPIRES_IN
    });
}

const createSendToken = (user, statusCode, res, msg) => {
    const token = signToken(user.id);
    const cookieOptions = {
        expires: new Date(
            Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
        ),
        httpOnly: true
    };
    if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
    res.cookie('jwt', token, cookieOptions);
    res.cookie('user_id', user.id, cookieOptions);

    // Remove password from output
    user.password = undefined;
    return res.status(statusCode).json({
        status: 'success',
        message: msg,
        token,
        data: {user}
    });
}

function getQueryResult(query) {
    return new Promise((resolve) => {
        dbConnect.query(query, function (err, result) {
          if (err) throw err;
          if (result){
            resolve(result)
          }
        });
    })
  }

/**
 * Sign Up
 */
exports.signup = catchAsync(async (req, res, next) => {
    var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
    const invalidEmail = await getQueryResult(selectQuery)

    // input field validation
    if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
        return res.status(200).json({
            status: 'fail',
            message: 'Please select captcha'
        });
    }else if (req.body.name === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Please enter username'
        });
    }else if (req.body.email === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Please enter email'
        });
    }else if (req.body.password === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Please enter password'
        });
    }else if (req.body.location === '') {
        return res.status(200).json({
            status: 'fail',
            message: 'Please enter location'
        });
    }else if(invalidEmail.length > 0){
        return res.status(200).json({
            status: 'fail',
            message: 'Email already exists'
        });
    }

    // Put your secret key here.
    var secretKey = process.env.CAPTCHA_SECRET;
    // req.connection.remoteAddress will provide IP address of connected user.
    var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
    // Hitting GET request to the URL, Google will respond with success or error scenario.
    request(verificationUrl, async (error, response, body) => {
        body = JSON.parse(body);
    });

    await dbConnect.query("INSERT INTO users(name, email, password, location) VALUES('" + req.body.name + "', '" + req.body.email + "', '" + await bcrypt.hash(req.body.password, 12) + "', '" + req.body.location + "')", function (err, result, fields) {
        if (err) throw err;
        return res.status(200).json({
            status: "success",
            message: "Register Sucessfully"
        })
    });
  
    // await User.create(req.body);
    // return res.status(200).json({
    //     status: "success",
    //     message: "Register Sucessfully"
    // })
});

/**
 * Sign In
 */
exports.signin = catchAsync(async (req, res, next) => {
    const { email, password } = req.body;
    if (!email || !password) {
        return res.status(200).json({
            status: 'fail',
            message: 'please enter email or password'
        });
    }

    await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
        if (err) throw err;
        if (!result.length){
            return res.status(200).json({
                status: 'fail',
                message: 'invalid email or password'
            });
        }else{
            var user = result[0];
            const hashedPassword = result[0].password;
            if (await bcrypt.compare(password, hashedPassword)) 
            {
                // const user = await User.findOne({ email }).select('+password');
                // if (!user || !await user.correctPassword(password, user.password)) {
                //     return res.status(200).json({
                //         status: 'fail',
                //         message: 'invalid email or password'
                //     });
                // }

                if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
                    return res.status(200).json({
                        status: 'fail',
                        message: 'Please select captcha'
                    });
                }

                var secretKey = process.env.CAPTCHA_SECRET;
                // req.connection.remoteAddress will provide IP address of connected user.
                var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
                // Hitting GET request to the URL, Google will respond with success or error scenario.
                request(verificationUrl, async (error, response, body) => {
                    body = JSON.parse(body);
                    // Success will be true or false depending upon captcha validation.
                    if (body.success == undefined || !body.success) {
                        return res.status(200).json({
                            status: 'fail',
                            message: 'Failed captcha verification'
                        });
                    } else {
                        createSendToken(user, 200, res, 'Login Successfully');
                    }
                });
            }
            else 
            {
                return res.status(200).json({
                    status: 'fail',
                    message: 'invalid password'
                });
            }
        }
    });
});

/**
 * Forgot Password
 */
exports.forgotPassword = catchAsync(async (req, res, next) => {
    // 1) Get User based on Posted Email
    // const user = await User.findOne({ email: req.body.email });
    // if (!user) {
    //     return res.status(200).json({
    //         status: 'fail',
    //         message: 'Please Provide a Email'
    //     });
    // }

    var user = [];
    await dbConnect.query("Select * from users where email ='"+req.body.email+"'", async function (err, result, fields) {
        if (err) throw err;
        if (!result.length){
            return res.status(200).json({
                status: 'fail',
                message: 'Please Provide a Email'
            });
        }
        else
        {
            user = result[0];
            // 2) Generate the random reset token
            // const resetToken = user.createPasswordResetToken();
            // await user.save({ validateBeforeSave: false });

            const resetToken = crypto.randomBytes(32).toString('hex');
            var passwordResetToken = crypto.createHash('sha256').update(resetToken).digest('hex');
            var passwordResetExpires = await (Date.now() + 10*60000);
            await dbConnect.query("UPDATE users SET passwordResetToken='" + passwordResetToken + "' , passwordResetExpires = '" + passwordResetExpires + "' where email ='"+req.body.email+"'", function (err, result) {
                if (err) throw err;
            });

            // 3) Send it to user's email
            const resetURL = `${req.protocol}://${req.get('host')}/reset_Password?token=${resetToken}`;
            const message = `Forgot your password? Submit a PATCH request with your new password and passwordConfirm to: ${resetURL}`;

            try {
                await sendEmail({
                    email: user.email,
                    subject: 'Your Password reset token (valid for 10 min)',
                    message
                });

                return res.status(200).json({
                    status: 'success',
                    message: 'Token send to email',
                    token: resetToken
                });
            }
            catch (err) {
                user.passwordResetToken = undefined;
                user.passwordResetExpires = undefined;
                // await user.save({ validateBeforeSave: false });
                return next(new AppError('There was an error sending the email. Try again later!', 500));
            }
        }
    });
});

/**
 * Reset Password
 */
exports.resetPassword = catchAsync(async (req, res, next) => {
    // 1) Get User based on the token
    const hashedToken = crypto.createHash('sha256').update(req.params.token).digest('hex');
    // const user = await User.findOne({ passwordResetToken: hashedToken, passwordResetExpires: { $gt: Date.now() } });

    var user = [];
    await dbConnect.query("Select * from users where passwordResetToken ='"+hashedToken+"' and passwordResetExpires > "+Date.now()+"", async function (err, result) {
        if (err) throw err;
        if (!result.length){
            return res.status(200).json({
                status: 'fail',
                message: 'Token is invalid or has expired'
            });
        }
    });

    // 2) If token has not expired, and there is user, set the new password
    // if (!user) {
    //     return res.status(200).json({
    //         status: 'fail',
    //         message: 'Token is invalid or has expired'
    //     });
    // }
    // user.password = req.body.password;
    // user.passwordResetToken = undefined;
    // user.passwordResetExpires = undefined;
    // await user.save();

    await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
        if (err) throw err;
        // 4) Log the user in, send JWT
        return res.status(200).json({
            status: 'success',
            message: 'Reset Password Successfully'
        });
    });

});

/**
 * Logout
 */
exports.logout = async (req, res) => {
    res.clearCookie('user_id');
    res.clearCookie('jwt');
    res.status(200).json({ status: 'success' });
}

/**
 * Login Page
 */
exports.login = async (req, res) => {
    res.status(200).render('login');
};

/**
 * Register Page
 */
exports.register = async (req, res) => {
    res.status(200).render('register');
};

/**
 * Forgot password Page
 */
exports.forgot_password = async (req, res) => {
    res.status(200).render('forgot_password');
};

/**
 * Forgot password Page
 */
exports.reset_password = async (req, res) => {
    res.status(200).render('reset_password');
};

/**
 * Index Page
 */
exports.index = async (req, res) => {
    console.log("aa", req.cookies.jwt)
    if (req.cookies.jwt == undefined) {
        return res.status(200).render('login');
    } else
        res.status(200).render('index', { user: req.user })
};

    Ezt a részt nem tudom,hogy kéne átalakítani:
    Tehát ne legyen recaptcha..

    else{
                var user = result[0];
                const hashedPassword = result[0].password;
                if (await bcrypt.compare(password, hashedPassword)) 
                {
                    // const user = await User.findOne({ email }).select('+password');
                    // if (!user || !await user.correctPassword(password, user.password)) {
                    //     return res.status(200).json({
                    //         status: 'fail',
                    //         message: 'invalid email or password'
                    //     });
                    // }
    
                    if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
                        return res.status(200).json({
                            status: 'fail',
                            message: 'Please select captcha'
                        });
                    }
    
                    var secretKey = process.env.CAPTCHA_SECRET;
                    // req.connection.remoteAddress will provide IP address of connected user.
                    var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
                    // Hitting GET request to the URL, Google will respond with success or error scenario.
                    request(verificationUrl, async (error, response, body) => {
                        body = JSON.parse(body);
                        // Success will be true or false depending upon captcha validation.
                        if (body.success == undefined || !body.success) {
                            return res.status(200).json({
                                status: 'fail',
                                message: 'Failed captcha verification'
                            });
                        } else {
                            createSendToken(user, 200, res, 'Login Successfully');
                        }
                    });
                }
                else 
                {
                    return res.status(200).json({
                        status: 'fail',
                        message: 'invalid password'
                    });
                }
            }

    oktopus Csalódás.

    OFF
    Nekem is. Miért nem lehet a beküldés előtt kód beillesztése és előnézet gombokat használni, vagy legalább miután beküldted a hozzászólást és látod, hogy pocsékul néz ki, megnyomni a szerkesztést és megfésülni, hogy ne kopjon el a többiek egérgörgője?! :-(

      message: 'Email címed paraszt'
      message: 'Jelszavad!'
      message: 'Ehune laksz.'
      message: 'Email találj ki mást.'
      message: 'Email already exists'
      message: 'invalid email or password'
      Send it to user's email
      user.passwordResetExpires = undefined;

      csuhas32 Xar a code bb rányomtam és beillesztettem az adott jeleken belül.
      Ezen a portál fejlesztőinek kéne foglalkozni az én oldalaimon nincsenek ilyen alap problémák.

      Amúgy ezt a részt akarom változtaztni:

       await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
              if (err) throw err;
              if (!result.length){
                  return res.status(200).json({
                      status: 'fail',
                      message: 'Hibás email vagy jelszó'
                  });
              }else{
                  var user = result[0];
                  const hashedPassword = result[0].password;
                  if (await bcrypt.compare(password, hashedPassword)) 
                  {
      
                      if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
                          return res.status(200).json({
                              status: 'fail',
                              message: 'Please select captcha'
                          });
                      }
      
                      var secretKey = process.env.CAPTCHA_SECRET;
                     
                      var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
                      
                      request(verificationUrl, async (error, response, body) => {
                          body = JSON.parse(body);
                         
                          if (body.success == undefined || !body.success) {
                              return res.status(200).json({
                                  status: 'fail',
                                  message: 'Failed captcha verification'
                              });
                          } else {
                              createSendToken(user, 200, res, 'Sikeres belépés');
                          }
                      });
                  }
                  else 
                  {
                      return res.status(200).json({
                          status: 'fail',
                          message: 'Hibás jelszó'
                      });
                  }
              }
          } `
      
      Erre:
      `
          await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
              if (err) throw err;
              if (!result.length){
                  return res.status(200).json({
                      status: 'fail',
                      message: 'Hibás email vagy jelszó'
                  });
              }else{
                  var user = result[0];
                  const hashedPassword = result[0].password;
                  if (await bcrypt.compare(password, hashedPassword)) 
                  {
                              createSendToken(user, 200, res, 'Sikeres belépés');
                      
                  }
                  else 
                  {
                      return res.status(200).json({
                          status: 'fail',
                          message: 'Hibás jelszó'
                      });
                  }
              }
          }

      De most azon kívül,hogy kiirja,hogy succes Belépés sikeres nem visz be az indexbe,hanem ugyanúgy kéri a belépési adatokat.

        oktopus Xar a code

        const { promisify } = require('util');
        const jwt = require('jsonwebtoken');
        var request = require('request');
        const express = require('express');
        const User = require('./../models/userModel');
        const catchAsync = require('./../utils/catchAsync');
        const AppError = require('./../utils/appError');
        const sendEmail = require('./../utils/email');
        const path = require('path');
        const { userJoin } = require('./../utils/users');
        
        const dbConnect = require("../connection");
        const bcrypt = require('bcryptjs');
        
        const signToken = id => {
        return jwt.sign({ id: id }, process.env.JWT_SECRET, {
        expiresIn: process.env.JWT_EXPIRES_IN
        });
        }
        
        const createSendToken = (user, statusCode, res, msg) => {
        const token = signToken(user.id);
        const cookieOptions = {
        expires: new Date(
        Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
        ),
        httpOnly: true
        };
        if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
        res.cookie('jwt', token, cookieOptions);
        res.cookie('user_id', user.id, cookieOptions);
        
        // Remove password from output
        user.password = undefined;
        return res.status(statusCode).json({
            status: 'success',
            message: msg,
            token,
            data: {user}
        });
        
        }
        
        function getQueryResult(query) {
        return new Promise((resolve) => {
        dbConnect.query(query, function (err, result) {
        if (err) throw err;
        if (result){
        resolve(result)
        }
        });
        })
        }
        
        /**
        
            Sign Up
            */
            exports.signup = catchAsync(async (req, res, next) => {
            var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
            const invalidEmail = await getQueryResult(selectQuery)
        
            // input field validation
            // if (req.body['g-recaptcha-response'] === undefined req.body['g-recaptcha-response'] === '' req.body['g-recaptcha-response'] === null) {return res.status(200).json({status: 'fail',message: 'Please select captcha'});}else
        
            if (req.body.name === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Neved wazze...'
            });
            }else if (req.body.email === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Email címed paraszt'
            });
            }else if (req.body.password === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Jelszavad!'
            });
            }else if (req.body.location === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Ehune laksz.'
            });
            }else if(invalidEmail.length > 0){
            return res.status(200).json({
            status: 'fail',
            message: 'Email találj ki mást.'
            });
            }
        
            // Put your secret key here.
            var secretKey = process.env.CAPTCHA_SECRET;
            // req.connection.remoteAddress will provide IP address of connected user.
            var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
            // Hitting GET request to the URL, Google will respond with success or error scenario.
            request(verificationUrl, async (error, response, body) => {
            body = JSON.parse(body);
            });
        
            await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
            if (err) throw err;
            // 4) Log the user in, send JWT
            return res.status(200).json({
            status: 'success',
            message: 'Reset Password Successfully'
            });
            });
        
        });
        
        /**
        
            Logout
            */
            exports.logout = async (req, res) => {
            res.clearCookie('user_id');
            res.clearCookie('jwt');
            res.status(200).json({ status: 'success' });
            }
        
        /**
        
            Login Page
            */
            exports.login = async (req, res) => {
            res.status(200).render('login');
            };
        
        /**
        
            Register Page
            */
            exports.register = async (req, res) => {
            res.status(200).render('register');
            };
        
        /**
        
            Forgot password Page
            */
            exports.forgot_password = async (req, res) => {
            res.status(200).render('forgot_password');
            };
        
        /**
        
            Forgot password Page
            */
            exports.reset_password = async (req, res) => {
            res.status(200).render('reset_password');
            };
        
        /**
        
            Index Page
            */
            exports.index = async (req, res) => {
            console.log("aa", req.cookies.jwt)
            if (req.cookies.jwt == undefined) {
            return res.status(200).render('login');
            } else
            res.status(200).render('index', { user: req.user })
            };
        
        `
        
        Ez meg a gyári:
        
        `const crypto = require('crypto');
        const { promisify } = require('util');
        const jwt = require('jsonwebtoken');
        var request = require('request');
        const express = require('express');
        const User = require('./../models/userModel');
        const catchAsync = require('./../utils/catchAsync');
        const AppError = require('./../utils/appError');
        const sendEmail = require('./../utils/email');
        const path = require('path');
        const { userJoin } = require('./../utils/users');
        
        const dbConnect = require("../connection");
        const bcrypt = require('bcryptjs');
        
        const signToken = id => {
        return jwt.sign({ id: id }, process.env.JWT_SECRET, {
        expiresIn: process.env.JWT_EXPIRES_IN
        });
        }
        
        const createSendToken = (user, statusCode, res, msg) => {
        const token = signToken(user.id);
        const cookieOptions = {
        expires: new Date(
        Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
        ),
        httpOnly: true
        };
        if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
        res.cookie('jwt', token, cookieOptions);
        res.cookie('user_id', user.id, cookieOptions);
        
        // Remove password from output
        user.password = undefined;
        return res.status(statusCode).json({
            status: 'success',
            message: msg,
            token,
            data: {user}
        });
        
        }
        
        function getQueryResult(query) {
        return new Promise((resolve) => {
        dbConnect.query(query, function (err, result) {
        if (err) throw err;
        if (result){
        resolve(result)
        }
        });
        })
        }
        
        /**
        
            Sign Up
            */
            exports.signup = catchAsync(async (req, res, next) => {
            var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
            const invalidEmail = await getQueryResult(selectQuery)
        
            // input field validation
            if (req.body['g-recaptcha-response'] === undefined req.body['g-recaptcha-response'] === '' req.body['g-recaptcha-response'] === null) {
            return res.status(200).json({
            status: 'fail',
            message: 'Please select captcha'
            });
            }else if (req.body.name === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Please enter username'
            });
            }else if (req.body.email === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Please enter email'
            });
            }else if (req.body.password === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Please enter password'
            });
            }else if (req.body.location === '') {
            return res.status(200).json({
            status: 'fail',
            message: 'Please enter location'
            });
            }else if(invalidEmail.length > 0){
            return res.status(200).json({
            status: 'fail',
            message: 'Email already exists'
            });
            }
        
            // Put your secret key here.
            var secretKey = process.env.CAPTCHA_SECRET;
            // req.connection.remoteAddress will provide IP address of connected user.
            var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
            // Hitting GET request to the URL, Google will respond with success or error scenario.
            request(verificationUrl, async (error, response, body) => {
            body = JSON.parse(body);
            });
        
            await dbConnect.query("INSERT INTO users(name, email, password, location) VALUES('" + req.body.name + "', '" + req.body.email + "', '" + await bcrypt.hash(req.body.password, 12) + "', '" + req.body.location + "')", function (err, result, fields) {
            if (err) throw err;
            return res.status(200).json({
            status: "success",
            message: "Register Sucessfully"
            })
            });
        
            // await User.create(req.body);
            // return res.status(200).json({
            // status: "success",
            // message: "Register Sucessfully"
            // })
            });
        
        /**
        
            Sign In
            */
            exports.signin = catchAsync(async (req, res, next) => {
            const { email, password } = req.body;
            if (!email || !password) {
            return res.status(200).json({
            status: 'fail',
            message: 'please enter email or password'
            });
            }
        
            await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
            if (err) throw err;
            if (!result.length){
            return res.status(200).json({
            status: 'fail',
            message: 'invalid email or password'
            });
            }else{
            var user = result[0];
            const hashedPassword = result[0].password;
            if (await bcrypt.compare(password, hashedPassword))
            {
            // const user = await User.findOne({ email }).select('+password');
            // if (!user || !await user.correctPassword(password, user.password)) {
            // return res.status(200).json({
            // status: 'fail',
            // message: 'invalid email or password'
            // });
            // }
        
                    if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
                        return res.status(200).json({
                            status: 'fail',
                            message: 'Please select captcha'
                        });
                    }
        
                    var secretKey = process.env.CAPTCHA_SECRET;
                    // req.connection.remoteAddress will provide IP address of connected user.
                    var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
                    // Hitting GET request to the URL, Google will respond with success or error scenario.
                    request(verificationUrl, async (error, response, body) => {
                        body = JSON.parse(body);
                        // Success will be true or false depending upon captcha validation.
                        if (body.success == undefined || !body.success) {
                            return res.status(200).json({
                                status: 'fail',
                                message: 'Failed captcha verification'
                            });
                        } else {
                            createSendToken(user, 200, res, 'Login Successfully');
                        }
                    });
                }
                else 
                {
                    return res.status(200).json({
                        status: 'fail',
                        message: 'invalid password'
                    });
                }
            }
        
        });
        });
        
        /**
        
            Forgot Password
            */
            exports.forgotPassword = catchAsync(async (req, res, next) => {
            // 1) Get User based on Posted Email
            // const user = await User.findOne({ email: req.body.email });
            // if (!user) {
            // return res.status(200).json({
            // status: 'fail',
            // message: 'Please Provide a Email'
            // });
            // }
        
            var user = [];
            await dbConnect.query("Select * from users where email ='"+req.body.email+"'", async function (err, result, fields) {
            if (err) throw err;
            if (!result.length){
            return res.status(200).json({
            status: 'fail',
            message: 'Please Provide a Email'
            });
            }
            else
            {
            user = result[0];
            // 2) Generate the random reset token
            // const resetToken = user.createPasswordResetToken();
            // await user.save({ validateBeforeSave: false });
        
                const resetToken = crypto.randomBytes(32).toString('hex');
                var passwordResetToken = crypto.createHash('sha256').update(resetToken).digest('hex');
                var passwordResetExpires = await (Date.now() + 10*60000);
                await dbConnect.query("UPDATE users SET passwordResetToken='" + passwordResetToken + "' , passwordResetExpires = '" + passwordResetExpires + "' where email ='"+req.body.email+"'", function (err, result) {
                    if (err) throw err;
                });
        
                // 3) Send it to user's email
                const resetURL = `${req.protocol}://${req.get('host')}/reset_Password?token=${resetToken}`;
                const message = `Forgot your password? Submit a PATCH request with your new password and passwordConfirm to: ${resetURL}`;
        
                try {
                    await sendEmail({
                        email: user.email,
                        subject: 'Your Password reset token (valid for 10 min)',
                        message
                    });
        
                    return res.status(200).json({
                        status: 'success',
                        message: 'Token send to email',
                        token: resetToken
                    });
                }
                catch (err) {
                    user.passwordResetToken = undefined;
                    user.passwordResetExpires = undefined;
                    // await user.save({ validateBeforeSave: false });
                    return next(new AppError('There was an error sending the email. Try again later!', 500));
                }
            }
        
        });
        });
        
        /**
        
            Reset Password
            */
            exports.resetPassword = catchAsync(async (req, res, next) => {
            // 1) Get User based on the token
            const hashedToken = crypto.createHash('sha256').update(req.params.token).digest('hex');
            // const user = await User.findOne({ passwordResetToken: hashedToken, passwordResetExpires: { $gt: Date.now() } });
        
            var user = [];
            await dbConnect.query("Select * from users where passwordResetToken ='"+hashedToken+"' and passwordResetExpires > "+Date.now()+"", async function (err, result) {
            if (err) throw err;
            if (!result.length){
            return res.status(200).json({
            status: 'fail',
            message: 'Token is invalid or has expired'
            });
            }
            });
        
            // 2) If token has not expired, and there is user, set the new password
            // if (!user) {
            // return res.status(200).json({
            // status: 'fail',
            // message: 'Token is invalid or has expired'
            // });
            // }
            // user.password = req.body.password;
            // user.passwordResetToken = undefined;
            // user.passwordResetExpires = undefined;
            // await user.save();
        
            await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
            if (err) throw err;
            // 4) Log the user in, send JWT
            return res.status(200).json({
            status: 'success',
            message: 'Reset Password Successfully'
            });
            });
        
        });
        
        /**
        
            Logout
            */
            exports.logout = async (req, res) => {
            res.clearCookie('user_id');
            res.clearCookie('jwt');
            res.status(200).json({ status: 'success' });
            }
        
        /**
        
            Login Page
            */
            exports.login = async (req, res) => {
            res.status(200).render('login');
            };
        
        /**
        
            Register Page
            */
            exports.register = async (req, res) => {
            res.status(200).render('register');
            };
        
        /**
        
            Forgot password Page
            */
            exports.forgot_password = async (req, res) => {
            res.status(200).render('forgot_password');
            };
        
        /**
        
            Forgot password Page
            */
            exports.reset_password = async (req, res) => {
            res.status(200).render('reset_password');
            };
        
        /**
        
            Index Page
            */
            exports.index = async (req, res) => {
            console.log("aa", req.cookies.jwt)
            if (req.cookies.jwt == undefined) {
            return res.status(200).render('login');
            } else
            res.status(200).render('index', { user: req.user })
            };

        Szöveg kijelöl, gomb nyom. Szerintem működik.

        d.r.i.
        OFF
        Alapvetően egyszerűbb itt helyben kijelölni a szöveget és megnyomni azt a nyamvadt </> gombot, mint elmenni valamelyik Pastebinre, oda is be kell másolni a szöveget, beküldeni, a linkjét kimásolni, ide visszalépni és a hozzászólásba betenni, ráadásul a szöveg rögtön itt van, nem kell ellátogatni egy külső oldalra, ahol afelett sincs hatalmunk, hogy meddig elérhető.
        Persze, ha valakinek nem megy a kód beillesztése, akkor felőlem tegye Pastebinre.
        Nekem mindegy, de ezek a kilométeres szövegek... :-(
        Már kezdem sajnálni szegény modikat, amiért ennyit zaklatom őket a jelentgetéssel, de még ha gépnél is vagyok, nincs jogosultságom megfésülni az elvétett formázást.

          csuhas32
          OFF: Az zavarja meg itt a felhasználókat, hogy alapból a kód beillesztése gomb soron belüli Markdown kódformázást csinál, szóval az egy karakteres verziót szúrja be. Beletettük hogy ha több sort kijelölve kattintanak rá, akkor a három karakteres verziót használja, de láthatólag ez sem elég 😃 Valszeg az lesz a megoldás hogy alapból csak a három karaktereset kellene beszúrni, mert aki ért a Markdownhoz, az amúgy sem használja a gombot.

            meskobalazs Valszeg az lesz a megoldás hogy alapból csak a három karaktereset kellene beszúrni

            OFF
            Támogatnám, mert Androidról nehezen oldom meg, hogy a teljes szöveget kijelölése után nyomjam meg a gombot.
            Üres szövegmezőben így most azt hiszem csak egy párat kapok a körmöcskéből, ha minden igaz, akkor, ha megnyomom a kód beillesztése gombot, akkor meg visszavonja ezt is...
            Az könnyebbnek tűnik, hogy megnyomom a gombot egy üres mezőben, erre kapok hat körmöcskét, valahogy csak odakoppintok a harmadik és negyedik közé és beillesztem a szöveget.