Flame of udun
Flame of udun

Reputation: 2237

lumen NotFoundHttpException in RoutesRequests.php

I know this question has been asked before here. (Please clink on the link before you vote to close it under the duplicate tag.) But none of the solutions have worked for me.

I can access / without any errors. But when I try to use a get request to login I get this error:

NotFoundHttpException
in RoutesRequests.php (line 594)
at Application->handleDispatcherResponse(array(0))
in RoutesRequests.php (line 532)
at Application->Laravel\Lumen\Concerns\{closure}()
in RoutesRequests.php (line 781)
at Application->sendThroughPipeline(array(), object(Closure))
in RoutesRequests.php (line 534)
at Application->dispatch(null)
in RoutesRequests.php (line 475)
at Application->run()
in index.php (line 28)

index.php (line 28) points to $app->run();

Here is my code for the login form page:

<!DOCTYPE html>
<html>
    <head>
    <title>notes!</title>
    <!-- <link rel="stylesheet" type="text/css" href="{{ url('../assets/css/main.css') }}"> -->
    <style>
            body {
            background-color: #ffffff;
        }

        .banner {
            margin: 100px auto;
            text-align: center;
            vertical-align: middle;
            font-family: 'Open Sans', sans-serif;
            font-size: 30px;
            color: #333333;
        }

        .loginContainer {
            width:30%;
            margin: 50px auto;
            vertical-align: middle;
            background-color: #333333;
            border:2px;
            border-radius:10px;
        }

        form {
            margin: 0 auto;
            padding: 50px;
        }

        form input {
            display: block;
            width: 300px;
            margin: 0 auto;
            margin-top: 5px;
            padding: 5px;
            font-size: 30px;
        }

        form button {
            display: block;
            width: 314px;
            margin: 0 auto;
            margin-top: 5px;
            padding: 5px;
            border-radius: 5px;
            border: none;
            background-color: #3366ff;
            color: #ffffff;
            font-size: 30px;
        }
    </style>
    <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
    </head>
    <body>
    <!-- <div class="navbar">
         <ul>
         <li>Login</li>
         <li>About Me!</li>
         </ul>
         </div> -->
    <div class="banner">
        <h1>Welcome to notes!</h1>
        <h4>Add notes, to-do lists and more!</h4>
    </div>
    <div class="loginContainer">
        <form class="signin" method="get" action="/login/">
        <input type="email" id="inputEmail" placeholder="Email" required="" autofocus="">
        <input type="password" id="inputPassword" placeholder="Password" required="">
        <button type="submit">Sign in</button>
        </form>
    </div>
    </body>
</html>

Here is the code for routes.php:

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/

$app->get('/', function () use ($app) {
    return view('welcome');
});

$app->get('login/','UsersController@authenticate');
$app->post('todo/','TodoController@store');
$app->get('todo/', 'TodoController@index');
$app->get('todo/{id}/', 'TodoController@show');
$app->put('todo/{id}/', 'TodoController@update');
$app->delete('todo/{id}/', 'TodoController@destroy');

?>

Here is the UsersController.php file:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use Illuminate\Support\Facades\Hash;

use Illuminate\Http\Request;

use App\Users;

class UsersController extends Controller

{

  public function __construct()

   {

//        $this->middleware('auth:api');

   }

   /**
    * Display a listing of the resource.
    *
    * @return \Illuminate\Http\Response
    */

   public function authenticate(Request $request)

   {

       $this->validate($request, [

       'email' => 'required',

       'password' => 'required'

        ]);

      $user = Users::where('email', $request->input('email'))->first();

     if(Hash::check($request->input('password'), $user->password)){

          $apikey = base64_encode(str_random(40));

          Users::where('email', $request->input('email'))->update(['api_key' => "$apikey"]);;

          return response()->json(['status' => 'success','api_key' => $apikey]);

      }else{

          return response()->json(['status' => 'fail'],401);

      }

   }

}    

?>

Upvotes: 0

Views: 3474

Answers (3)

Amr Aly
Amr Aly

Reputation: 3905

That's because the trailing backslash in your action attribute but here's some points to consider:

First of all I do not know why you want to use GET request for login form since the credentials you send to the server will appear in the url in the user's browser and this kind of info should be safe especially the Password - another thing why don't you use blade engine to make your views more elegant but it's ok we can use the native php syntax.

  • to get the correct path to the /login route we will make use of url.

  • then we will change the method to post which suits perfect for what we want to achieve : send data to our server without being displayed in the user's browser so our form will look like this:

    <form class="signin" method="post" action="<?=url('/login');?>"> <input type="email" id="inputEmail" name="email" placeholder="Email"> <input type="password" id="inputPassword" name="password" placeholder="Password"> </form>

  • another thing i have added the name attribute which is important when retrieving the form values.

  • and also we will use post method in routes/web.php like so:

    $app->post('/login','UsersController@authenticate');

Upvotes: 1

Govind Samrow
Govind Samrow

Reputation: 10179

I think you .htaccess file missing, add .htaccess file in public directory and assign read permission to apache:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

Upvotes: -1

mokamoto12
mokamoto12

Reputation: 383

Route first argument is trimmed with '/'

Fix to form action: /login/ -> /login

<form class="signin" method="get" action="/login">

Upvotes: 3

Related Questions