2
votes

Using flask login, trying to login the user after the user registers. user_login() works for my login route, however after registration, it redirects to the login route, not the intended home page. So my question is, can login_user() only work in a 'login' route?

Here is a basic version of what I have now:

class User(flask_login.UserMixin):
def __init__(self, userName, email, firstName):
        self.userName = userName
        self.id = email
        self.email = email
        self.firstName = firstName

@login_manager.user_loader
def user_loader(email):
    """ code to get userdata from database """

    user = User(userName,email,firstName)

    return user

@app.route('/register', methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    elif request.method == 'POST':
        """ code for creating user from form data """
        #create session for user
        user = User(userName,email,firstName)

        flask_login.login_user(user)

        return redirect(url_for('home'))

@app.route('/login', methods=['GET','POST'])
def login():

    if request.method == 'GET':
        return render_template('login.html')

    elif request.method == 'POST':
       """ code for authorizing a user """

        user = User(userName,email,firstName)

        flask_login.login_user(user)
        return flask.redirect(flask.url_for('home'))
    else:
        return render_template('login.html')

@app.route('/home')
@flask_login.login_required
def home():
    return render_template('home.html')

UPDATE: I wasn't loading my user correctly in my user_loader

1

1 Answers

3
votes

After you register the user, you're redirecting straight to the /home route, which requires the user to be logged-in. But you haven't actually logged them in at this stage, only created the user.

You should add the following in your /register route after the user has been created:

    flask_login.login_user(user)