Can we create a login system with only email in own appinventor

I am creating my own appinventor
Can we create a login system with only email in own appinventor
in login page(http://localhost:9999/login/) it ask for both image and password can we remove password textbox and login with email
If we can then how I tried but I failed

That's called SSO (Single sign-on).
This is probably not possible on App Inventor, since it requires you to sign in from google.

You could try removing the Google sign-in popup, and making a custom login page with only an e-mail address box, which then prompts you into the App Inventor interface.

Unfortunately, this may be considered a breach of security.

I take this decison because when I edit login.jsp then I am not able to login

When I click on login after entering email and password this error came

HTTP ERROR 500 java.lang.NullPointerException
URI:	/login
STATUS:	500
MESSAGE:	java.lang.NullPointerException
SERVLET:	LoginServlet
CAUSED BY:	java.lang.NullPointerException
Caused by:
java.lang.NullPointerException
	at com.google.appinventor.server.storage.ObjectifyStorageIo.getUserFromEmail(ObjectifyStorageIo.java:337)
	at com.google.appinventor.server.LoginServlet.doPost(LoginServlet.java:352)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
	at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:135)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:62)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.appengine.tools.development.jetty9.StaticFileFilter.doFilter(StaticFileFilter.java:123)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at com.google.appengine.tools.development.DevAppServerRequestLogFilter.doFilter(DevAppServerRequestLogFilter.java:28)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at com.google.appengine.tools.development.jetty9.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:94)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at com.google.appengine.tools.development.jetty9.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:597)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:516)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.lang.Thread.run(Thread.java:748)
Powered by Jetty:// 9.4.43.v20210629

Well, that makes sense, given my last sentence in my previous post. It's probably going to be futile to try doing something like this, especially when signing in with Google is usually the easiest way to do so.

But user can signin with administator I want to remove that but we can not remove that

"EatWhatYouKill" is an interesting class name; is it a custom one made by you?

Yes I have created a custom login page

My code

<%@page import="javax.servlet.http.HttpServletRequest"%>

<%@page import="com.google.appinventor.server.util.UriBuilder"%>

<%@page import="org.apache.commons.lang3.StringEscapeUtils"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!doctype html>

<%

   String error = StringEscapeUtils.escapeHtml4(request.getParameter("error"));

   String useGoogleLabel = (String) request.getAttribute("useGoogleLabel");

   String locale = StringEscapeUtils.escapeHtml4(request.getParameter("locale"));

   String redirect = StringEscapeUtils.escapeHtml4(request.getParameter("redirect"));

   String repo = StringEscapeUtils.escapeHtml4((String) request.getAttribute("repo"));

   String autoload = StringEscapeUtils.escapeHtml4((String) request.getAttribute("autoload"));

   String galleryId = StringEscapeUtils.escapeHtml4((String) request.getAttribute("galleryId"));

   String newGalleryId = StringEscapeUtils.escapeHtml4(request.getParameter("ng"));

   if (locale == null) {

       locale = "en";

   }

%>

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <meta HTTP-EQUIV="pragma" CONTENT="no-cache"/>

    <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"/>

    <meta HTTP-EQUIV="expires" CONTENT="0"/>

    <title>App Buider</title>

  </head>

<body style="margin-left: 40%; margin-top: 15%;">

<form method=POST action="/login" style="align-content: center; text-align: center; background-color: white; box-shadow: 1px 1px 8px; border-radius: 30px; width: 350px; height: 350px;">

<h1 style="padding-top: 20px;">Login to App Builder</h1>

<div style="width: 300px; margin-left: 30px; background-color: lightgray; border-radius: 20px;">

<img src="favicon.ico" style="">

<input type=text placeholder="Email" style="height: 40px; width: 250px; background: none; border: none; outline: none;">

</div>

<div style="width: 300px; margin-left: 30px; margin-top: 20px; background-color: lightgray; border-radius: 20px;">

<img src="favicon.ico" style="padding-right: 10px; padding-left: 5px;">

<input type=password name=password placeholder="Password" style="height: 40px; width: 250px; background: none; border: none; outline: none;">

</div>

<p><h4 style="margin-right: 150px;">Forgot password?</h4><h4 style="margin-right: 110px;">Don't have an account?</h4></p>

<input type=Submit value="Login" style="width: 150px; height: 49px; background-color: rgba(0, 0, 255, 0.445); border: none; border-radius: 20px;">

</form>

</body></html>
1 Like

Have you removed a variable anywhere in the code? There's a NullPointerException again.

1 Like

Yes I have removed

1 Like

Wait I am trying after adding that removed variable

That's probably the problem. Try reinstantiating it.

I can copy paste code of that file

That isn't required. Could you please tell me how many variables you have removed?

I have removed 7 or 8

One of them could've been a very essential one.

OR, just maybe...
App Inventor may have an encapsulation class, making it impossible for you to edit anything.

1 Like

How to do like this? because when Sign In with Google can only support like this...

By removing the Google sign-in prompt. As I've mentioned, this could be taken as a breach of security by Google, which may not be ideal.

1 Like

Wow @NishyanthKumar you are so knowlegeble This error coming bcs I removed name=email in email textbox

@NishyanthKumar may I know why you are not building you appinventor if you I will I will surely tell that you will success