def login(user)
      @current_user = user
      @current_user.generate_session_token if user.present?

      message = catch(:failure) do
        Authenticate.lifecycle.run_callbacks(:after_set_user, @current_user, self, event: :authentication)
        Authenticate.lifecycle.run_callbacks(:after_authentication, @current_user, self, event: :authentication)
      end

      status = message.present? ? Failure.new(message) : Success.new
      if status.success?
        @current_user.save
        write_cookie if @current_user.session_token
      else
        @current_user = nil
      end

      yield(status) if block_given?
    end
def login(user)
      @current_user = user
      @current_user.generate_session_token if user.present?

      message = catch(:failure) do
        Authenticate.lifecycle.run_callbacks(:after_set_user, @current_user, self, event: :authentication)
        Authenticate.lifecycle.run_callbacks(:after_authentication, @current_user, self, event: :authentication)
      end

      status = message.present? ? Failure.new(message) : Success.new
      if status.success?
        @current_user.save
        write_cookie if @current_user.session_token
      else
        @current_user = nil
      end

      yield(status) if block_given?
    end
Initialize an Authenticate session.

 The presence of a session does NOT mean the user is logged in; call #logged_in? to determine login status.
 Finish user login process, *after* the user has been authenticated.
 The user is authenticated by Authenticate::Controller#authenticate.

 Called when user creates an account or signs back into the app.
 Runs all configured callbacks, checking for login failure.

 If login is successful, @current_user is set and a session token is generated
 and returned to the client browser.
 If login fails, the user is NOT logged in. No session token is set,
 and @current_user will not be set.

 After callbacks are finished, a {LoginStatus} is yielded to the provided block,
 if one is provided.

 @param [User] user login completed for this user
 @yieldparam [Success,Failure] status result of the sign in operation.
 @return [User]